Changeset 2725 in MondoRescue for branches/2.2.9/mindi-busybox/archival/dpkg_deb.c
- Timestamp:
- Feb 25, 2011, 9:26:54 PM (13 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
branches/2.2.9/mindi-busybox/archival/dpkg_deb.c
r1765 r2725 3 3 * dpkg-deb packs, unpacks and provides information about Debian archives. 4 4 * 5 * Licensed under GPLv2 or later, see file LICENSE in this tarball for details.5 * Licensed under GPLv2 or later, see file LICENSE in this source tree. 6 6 */ 7 7 #include "libbb.h" 8 #include " unarchive.h"8 #include "archive.h" 9 9 10 #define DPKG_DEB_OPT_CONTENTS 11 #define DPKG_DEB_OPT_CONTROL 12 #define DPKG_DEB_OPT_FIELD 13 #define DPKG_DEB_OPT_EXTRACT 14 #define DPKG_DEB_OPT_EXTRACT_VERBOSE 10 #define DPKG_DEB_OPT_CONTENTS 1 11 #define DPKG_DEB_OPT_CONTROL 2 12 #define DPKG_DEB_OPT_FIELD 4 13 #define DPKG_DEB_OPT_EXTRACT 8 14 #define DPKG_DEB_OPT_EXTRACT_VERBOSE 16 15 15 16 int dpkg_deb_main(int argc, char **argv) ;16 int dpkg_deb_main(int argc, char **argv) MAIN_EXTERNALLY_VISIBLE; 17 17 int dpkg_deb_main(int argc, char **argv) 18 18 { … … 21 21 llist_t *control_tar_llist = NULL; 22 22 unsigned opt; 23 const char *extract_dir = NULL;24 short argcount = 1;23 const char *extract_dir; 24 int need_args; 25 25 26 26 /* Setup the tar archive handle */ … … 29 29 /* Setup an ar archive handle that refers to the gzip sub archive */ 30 30 ar_archive = init_handle(); 31 ar_archive-> sub_archive = tar_archive;31 ar_archive->dpkg__sub_archive = tar_archive; 32 32 ar_archive->filter = filter_accept_list_reassign; 33 33 34 #if ENABLE_FEATURE_ DEB_TAR_GZ35 llist_add_to(& (ar_archive->accept), (char*)"data.tar.gz");34 #if ENABLE_FEATURE_SEAMLESS_GZ 35 llist_add_to(&ar_archive->accept, (char*)"data.tar.gz"); 36 36 llist_add_to(&control_tar_llist, (char*)"control.tar.gz"); 37 37 #endif 38 39 #if ENABLE_FEATURE_DEB_TAR_BZ2 40 llist_add_to(&(ar_archive->accept), (char*)"data.tar.bz2"); 38 #if ENABLE_FEATURE_SEAMLESS_BZ2 39 llist_add_to(&ar_archive->accept, (char*)"data.tar.bz2"); 41 40 llist_add_to(&control_tar_llist, (char*)"control.tar.bz2"); 42 41 #endif 42 #if ENABLE_FEATURE_SEAMLESS_LZMA 43 llist_add_to(&ar_archive->accept, (char*)"data.tar.lzma"); 44 llist_add_to(&control_tar_llist, (char*)"control.tar.lzma"); 45 #endif 43 46 44 opt_complementary = " ?c--efXx:e--cfXx:f--ceXx:X--cefx:x--cefX";47 opt_complementary = "c--efXx:e--cfXx:f--ceXx:X--cefx:x--cefX"; 45 48 opt = getopt32(argv, "cefXx"); 49 argv += optind; 50 argc -= optind; 46 51 47 52 if (opt & DPKG_DEB_OPT_CONTENTS) { 48 53 tar_archive->action_header = header_verbose_list; 49 54 } 55 extract_dir = NULL; 56 need_args = 1; 50 57 if (opt & DPKG_DEB_OPT_CONTROL) { 51 58 ar_archive->accept = control_tar_llist; 52 59 tar_archive->action_data = data_extract_all; 53 if ( optind +1 == argc) {60 if (1 == argc) { 54 61 extract_dir = "./DEBIAN"; 55 62 } else { 56 argcount++;63 need_args++; 57 64 } 58 65 } … … 71 78 if (opt & (DPKG_DEB_OPT_EXTRACT_VERBOSE | DPKG_DEB_OPT_EXTRACT)) { 72 79 tar_archive->action_data = data_extract_all; 73 argcount= 2;80 need_args = 2; 74 81 } 75 82 76 if ( (optind + argcount)!= argc) {83 if (need_args != argc) { 77 84 bb_show_usage(); 78 85 } 79 86 80 tar_archive->src_fd = ar_archive->src_fd = xopen(argv[ optind++], O_RDONLY);87 tar_archive->src_fd = ar_archive->src_fd = xopen(argv[0], O_RDONLY); 81 88 82 /* Work out where to extract the files */89 /* Work out where to extract the files */ 83 90 /* 2nd argument is a dir name */ 84 if (argv[ optind]) {85 extract_dir = argv[ optind];91 if (argv[1]) { 92 extract_dir = argv[1]; 86 93 } 87 94 if (extract_dir) { … … 89 96 xchdir(extract_dir); 90 97 } 98 99 /* Do it */ 91 100 unpack_ar_archive(ar_archive); 92 101 93 102 /* Cleanup */ 94 close(ar_archive->src_fd); 103 if (ENABLE_FEATURE_CLEAN_UP) 104 close(ar_archive->src_fd); 95 105 96 106 return EXIT_SUCCESS;
Note:
See TracChangeset
for help on using the changeset viewer.