1/* vi: set sw=4 ts=4: */ 2/* 3 * Copyright (C) 2002 by Glenn McGrath 4 * 5 * Licensed under GPLv2 or later, see file LICENSE in this tarball for details. 6 */ 7 8#include "libbb.h" 9#include "unarchive.h" 10 11/* 12 * Reassign the subarchive metadata parser based on the filename extension 13 * e.g. if its a .tar.gz modify archive_handle->sub_archive to process a .tar.gz 14 * or if its a .tar.bz2 make archive_handle->sub_archive handle that 15 */ 16char filter_accept_list_reassign(archive_handle_t *archive_handle) 17{ 18 /* Check the file entry is in the accept list */ 19 if (find_list_entry(archive_handle->accept, archive_handle->file_header->name)) { 20 const char *name_ptr; 21 22 /* Extract the last 2 extensions */ 23 name_ptr = strrchr(archive_handle->file_header->name, '.'); 24 25 /* Modify the subarchive handler based on the extension */ 26#if ENABLE_FEATURE_DEB_TAR_GZ 27 if (strcmp(name_ptr, ".gz") == 0) { 28 archive_handle->action_data_subarchive = get_header_tar_gz; 29 return EXIT_SUCCESS; 30 } 31#endif 32#if ENABLE_FEATURE_DEB_TAR_BZ2 33 if (strcmp(name_ptr, ".bz2") == 0) { 34 archive_handle->action_data_subarchive = get_header_tar_bz2; 35 return EXIT_SUCCESS; 36 } 37#endif 38 if (ENABLE_FEATURE_DEB_TAR_LZMA && !strcmp(name_ptr, ".lzma")) { 39 archive_handle->action_data_subarchive = get_header_tar_lzma; 40 return EXIT_SUCCESS; 41 } 42 } 43 return EXIT_FAILURE; 44} 45