1248590Smm/*- 2248590Smm * Copyright (c) 2003-2007 Tim Kientzle 3248590Smm * Copyright (c) 2012 Michihiro NAKAJIMA 4248590Smm * All rights reserved. 5248590Smm * 6248590Smm * Redistribution and use in source and binary forms, with or without 7248590Smm * modification, are permitted provided that the following conditions 8248590Smm * are met: 9248590Smm * 1. Redistributions of source code must retain the above copyright 10248590Smm * notice, this list of conditions and the following disclaimer. 11248590Smm * 2. Redistributions in binary form must reproduce the above copyright 12248590Smm * notice, this list of conditions and the following disclaimer in the 13248590Smm * documentation and/or other materials provided with the distribution. 14248590Smm * 15248590Smm * THIS SOFTWARE IS PROVIDED BY THE AUTHOR(S) ``AS IS'' AND ANY EXPRESS OR 16248590Smm * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES 17248590Smm * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. 18248590Smm * IN NO EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY DIRECT, INDIRECT, 19248590Smm * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT 20248590Smm * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, 21248590Smm * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY 22248590Smm * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 23248590Smm * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF 24248590Smm * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 25248590Smm */ 26248590Smm 27248590Smm#include "archive_platform.h" 28248590Smm__FBSDID("$FreeBSD$"); 29248590Smm 30248590Smm#ifdef HAVE_SYS_TYPES_H 31248590Smm#include <sys/types.h> 32248590Smm#endif 33248590Smm 34248590Smm#ifdef HAVE_ERRNO_H 35248590Smm#include <errno.h> 36248590Smm#endif 37248590Smm#ifdef HAVE_STRING_H 38248590Smm#include <string.h> 39248590Smm#endif 40248590Smm 41248590Smm#include "archive.h" 42248590Smm#include "archive_private.h" 43248590Smm 44248590Smm/* A table that maps names to functions. */ 45248590Smmstatic 46248590Smmstruct { const char *name; int (*setter)(struct archive *); } names[] = 47248590Smm{ 48248590Smm { "b64encode", archive_write_add_filter_b64encode }, 49248590Smm { "bzip2", archive_write_add_filter_bzip2 }, 50248590Smm { "compress", archive_write_add_filter_compress }, 51248590Smm { "grzip", archive_write_add_filter_grzip }, 52248590Smm { "gzip", archive_write_add_filter_gzip }, 53248590Smm { "lrzip", archive_write_add_filter_lrzip }, 54248590Smm { "lzip", archive_write_add_filter_lzip }, 55248590Smm { "lzma", archive_write_add_filter_lzma }, 56248590Smm { "lzop", archive_write_add_filter_lzop }, 57248590Smm { "uuencode", archive_write_add_filter_uuencode }, 58248590Smm { "xz", archive_write_add_filter_xz }, 59248590Smm { NULL, NULL } 60248590Smm}; 61248590Smm 62248590Smmint 63248590Smmarchive_write_add_filter_by_name(struct archive *a, const char *name) 64248590Smm{ 65248590Smm int i; 66248590Smm 67248590Smm for (i = 0; names[i].name != NULL; i++) { 68248590Smm if (strcmp(name, names[i].name) == 0) 69248590Smm return ((names[i].setter)(a)); 70248590Smm } 71248590Smm 72248590Smm archive_set_error(a, EINVAL, "No such filter '%s'", name); 73248590Smm a->state = ARCHIVE_STATE_FATAL; 74248590Smm return (ARCHIVE_FATAL); 75248590Smm} 76