archive_write_set_format.c revision 228753
1129330Sjoerg/*- 2129330Sjoerg * Copyright (c) 2003-2007 Tim Kientzle 3129330Sjoerg * All rights reserved. 4129330Sjoerg * 5129330Sjoerg * Redistribution and use in source and binary forms, with or without 6129330Sjoerg * modification, are permitted provided that the following conditions 7129330Sjoerg * are met: 8129330Sjoerg * 1. Redistributions of source code must retain the above copyright 9129330Sjoerg * notice, this list of conditions and the following disclaimer. 10129330Sjoerg * 2. Redistributions in binary form must reproduce the above copyright 11129330Sjoerg * notice, this list of conditions and the following disclaimer in the 12129330Sjoerg * documentation and/or other materials provided with the distribution. 13129330Sjoerg * 14129330Sjoerg * THIS SOFTWARE IS PROVIDED BY THE AUTHOR(S) ``AS IS'' AND ANY EXPRESS OR 15129330Sjoerg * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES 16129330Sjoerg * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. 17129330Sjoerg * IN NO EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY DIRECT, INDIRECT, 18129330Sjoerg * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT 19129330Sjoerg * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, 20129330Sjoerg * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY 21129330Sjoerg * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 22129330Sjoerg * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF 23129330Sjoerg * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 24129330Sjoerg */ 25129330Sjoerg 26129330Sjoerg#include "archive_platform.h" 27129330Sjoerg__FBSDID("$FreeBSD: head/lib/libarchive/archive_write_set_format.c 201168 2009-12-29 06:15:32Z kientzle $"); 28129330Sjoerg 29129330Sjoerg#ifdef HAVE_SYS_TYPES_H 30129330Sjoerg#include <sys/types.h> 31129330Sjoerg#endif 32129330Sjoerg 33129330Sjoerg#ifdef HAVE_ERRNO_H 34129330Sjoerg#include <errno.h> 35129330Sjoerg#endif 36129330Sjoerg 37129330Sjoerg#include "archive.h" 38129330Sjoerg#include "archive_private.h" 39129330Sjoerg 40129330Sjoerg/* A table that maps format codes to functions. */ 41129330Sjoergstatic 42129330Sjoergstruct { int code; int (*setter)(struct archive *); } codes[] = 43129330Sjoerg{ 44129330Sjoerg { ARCHIVE_FORMAT_CPIO, archive_write_set_format_cpio }, 45129330Sjoerg { ARCHIVE_FORMAT_CPIO_SVR4_NOCRC, archive_write_set_format_cpio_newc }, 46129330Sjoerg { ARCHIVE_FORMAT_CPIO_POSIX, archive_write_set_format_cpio }, 47129330Sjoerg { ARCHIVE_FORMAT_MTREE, archive_write_set_format_mtree }, 48129330Sjoerg { ARCHIVE_FORMAT_SHAR, archive_write_set_format_shar }, 49129330Sjoerg { ARCHIVE_FORMAT_SHAR_BASE, archive_write_set_format_shar }, 50129330Sjoerg { ARCHIVE_FORMAT_SHAR_DUMP, archive_write_set_format_shar_dump }, 51129330Sjoerg { ARCHIVE_FORMAT_TAR, archive_write_set_format_pax_restricted }, 52129330Sjoerg { ARCHIVE_FORMAT_TAR_PAX_INTERCHANGE, archive_write_set_format_pax }, 53129330Sjoerg { ARCHIVE_FORMAT_TAR_PAX_RESTRICTED, 54129330Sjoerg archive_write_set_format_pax_restricted }, 55129330Sjoerg { ARCHIVE_FORMAT_TAR_USTAR, archive_write_set_format_ustar }, 56129330Sjoerg { ARCHIVE_FORMAT_ZIP, archive_write_set_format_zip }, 57129330Sjoerg { 0, NULL } 58129330Sjoerg}; 59129330Sjoerg 60129330Sjoergint 61129330Sjoergarchive_write_set_format(struct archive *a, int code) 62129330Sjoerg{ 63129330Sjoerg int i; 64129330Sjoerg 65129330Sjoerg for (i = 0; codes[i].code != 0; i++) { 66129330Sjoerg if (code == codes[i].code) 67129330Sjoerg return ((codes[i].setter)(a)); 68129330Sjoerg } 69129330Sjoerg 70129330Sjoerg archive_set_error(a, EINVAL, "No such format"); 71129330Sjoerg return (ARCHIVE_FATAL); 72129330Sjoerg} 73129330Sjoerg