archive_write_add_filter.c revision 299529
155714Skris/*- 255714Skris * Copyright (c) 2012 Ondrej Holy 355714Skris * All rights reserved. 455714Skris * 555714Skris * Redistribution and use in source and binary forms, with or without 655714Skris * modification, are permitted provided that the following conditions 755714Skris * are met: 855714Skris * 1. Redistributions of source code must retain the above copyright 955714Skris * notice, this list of conditions and the following disclaimer. 10296465Sdelphij * 2. Redistributions in binary form must reproduce the above copyright 1155714Skris * notice, this list of conditions and the following disclaimer in the 1255714Skris * documentation and/or other materials provided with the distribution. 1355714Skris * 1455714Skris * THIS SOFTWARE IS PROVIDED BY THE AUTHOR(S) ``AS IS'' AND ANY EXPRESS OR 1555714Skris * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES 1655714Skris * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. 1755714Skris * IN NO EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY DIRECT, INDIRECT, 1855714Skris * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT 1955714Skris * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, 2055714Skris * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY 2155714Skris * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 2255714Skris * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF 2355714Skris * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 2455714Skris */ 2555714Skris 2655714Skris#include "archive_platform.h" 2755714Skris__FBSDID("$FreeBSD$"); 2855714Skris 2955714Skris#ifdef HAVE_SYS_TYPES_H 3055714Skris#include <sys/types.h> 3155714Skris#endif 3255714Skris 3355714Skris#ifdef HAVE_ERRNO_H 3455714Skris#include <errno.h> 3555714Skris#endif 3655714Skris 3755714Skris#include "archive.h" 3855714Skris#include "archive_private.h" 3955714Skris 4055714Skris/* A table that maps filter codes to functions. */ 4155714Skrisstatic 4255714Skrisstruct { int code; int (*setter)(struct archive *); } codes[] = 4355714Skris{ 4455714Skris { ARCHIVE_FILTER_NONE, archive_write_add_filter_none }, 4555714Skris { ARCHIVE_FILTER_GZIP, archive_write_add_filter_gzip }, 4655714Skris { ARCHIVE_FILTER_BZIP2, archive_write_add_filter_bzip2 }, 4755714Skris { ARCHIVE_FILTER_COMPRESS, archive_write_add_filter_compress }, 4855714Skris { ARCHIVE_FILTER_GRZIP, archive_write_add_filter_grzip }, 4955714Skris { ARCHIVE_FILTER_LRZIP, archive_write_add_filter_lrzip }, 5055714Skris { ARCHIVE_FILTER_LZ4, archive_write_add_filter_lz4 }, 5155714Skris { ARCHIVE_FILTER_LZIP, archive_write_add_filter_lzip }, 5255714Skris { ARCHIVE_FILTER_LZMA, archive_write_add_filter_lzma }, 5355714Skris { ARCHIVE_FILTER_LZOP, archive_write_add_filter_lzip }, 5455714Skris { ARCHIVE_FILTER_UU, archive_write_add_filter_uuencode }, 5555714Skris { ARCHIVE_FILTER_XZ, archive_write_add_filter_xz }, 56296465Sdelphij { -1, NULL } 57296465Sdelphij}; 5855714Skris 5955714Skrisint 6055714Skrisarchive_write_add_filter(struct archive *a, int code) 6155714Skris{ 6255714Skris int i; 6355714Skris 6455714Skris for (i = 0; codes[i].code != -1; i++) { 6555714Skris if (code == codes[i].code) 6655714Skris return ((codes[i].setter)(a)); 67109998Smarkm } 68109998Smarkm 6955714Skris archive_set_error(a, EINVAL, "No such filter"); 70109998Smarkm return (ARCHIVE_FATAL); 7159191Skris} 72109998Smarkm