Magellan Linux

Annotation of /trunk/mkinitrd-magellan/busybox/archival/ar.c

Parent Directory Parent Directory | Revision Log Revision Log


Revision 984 - (hide annotations) (download)
Sun May 30 11:32:42 2010 UTC (13 years, 11 months ago) by niro
File MIME type: text/plain
File size: 2349 byte(s)
-updated to busybox-1.16.1 and enabled blkid/uuid support in default config
1 niro 532 /* vi: set sw=4 ts=4: */
2     /*
3     * Mini ar implementation for busybox
4     *
5     * Copyright (C) 2000 by Glenn McGrath
6     *
7     * Based in part on BusyBox tar, Debian dpkg-deb and GNU ar.
8     *
9     * Licensed under GPLv2 or later, see file LICENSE in this tarball for details.
10     *
11     * There is no single standard to adhere to so ar may not portable
12     * between different systems
13     * http://www.unix-systems.org/single_unix_specification_v2/xcu/ar.html
14     */
15    
16 niro 816 #include "libbb.h"
17 niro 532 #include "unarchive.h"
18    
19 niro 816 static void FAST_FUNC header_verbose_list_ar(const file_header_t *file_header)
20 niro 532 {
21     const char *mode = bb_mode_string(file_header->mode);
22     char *mtime;
23    
24     mtime = ctime(&file_header->mtime);
25     mtime[16] = ' ';
26     memmove(&mtime[17], &mtime[20], 4);
27     mtime[21] = '\0';
28     printf("%s %d/%d%7d %s %s\n", &mode[1], file_header->uid, file_header->gid,
29     (int) file_header->size, &mtime[4], file_header->name);
30     }
31    
32     #define AR_CTX_PRINT 0x01
33     #define AR_CTX_LIST 0x02
34     #define AR_CTX_EXTRACT 0x04
35     #define AR_OPT_PRESERVE_DATE 0x08
36     #define AR_OPT_VERBOSE 0x10
37     #define AR_OPT_CREATE 0x20
38     #define AR_OPT_INSERT 0x40
39    
40 niro 816 int ar_main(int argc, char **argv) MAIN_EXTERNALLY_VISIBLE;
41 niro 984 int ar_main(int argc UNUSED_PARAM, char **argv)
42 niro 532 {
43 niro 816 static const char msg_unsupported_err[] ALIGN1 =
44     "archive %s is not supported";
45    
46 niro 532 archive_handle_t *archive_handle;
47     unsigned opt;
48    
49     archive_handle = init_handle();
50    
51     /* Prepend '-' to the first argument if required */
52 niro 816 opt_complementary = "--:p:t:x:-1:p--tx:t--px:x--pt";
53     opt = getopt32(argv, "ptxovcr");
54 niro 984 argv += optind;
55 niro 532
56     if (opt & AR_CTX_PRINT) {
57     archive_handle->action_data = data_extract_to_stdout;
58     }
59     if (opt & AR_CTX_LIST) {
60     archive_handle->action_header = header_list;
61     }
62     if (opt & AR_CTX_EXTRACT) {
63     archive_handle->action_data = data_extract_all;
64     }
65     if (opt & AR_OPT_PRESERVE_DATE) {
66 niro 984 archive_handle->ah_flags |= ARCHIVE_RESTORE_DATE;
67 niro 532 }
68     if (opt & AR_OPT_VERBOSE) {
69     archive_handle->action_header = header_verbose_list_ar;
70     }
71     if (opt & AR_OPT_CREATE) {
72     bb_error_msg_and_die(msg_unsupported_err, "creation");
73     }
74     if (opt & AR_OPT_INSERT) {
75     bb_error_msg_and_die(msg_unsupported_err, "insertion");
76     }
77    
78 niro 984 archive_handle->src_fd = xopen(*argv++, O_RDONLY);
79 niro 532
80 niro 984 while (*argv) {
81 niro 532 archive_handle->filter = filter_accept_list;
82 niro 984 llist_add_to(&archive_handle->accept, *argv++);
83 niro 532 }
84    
85 niro 816 unpack_ar_archive(archive_handle);
86 niro 532
87     return EXIT_SUCCESS;
88     }