Changeset 3232 in MondoRescue for branches/3.2/mindi-busybox/archival/cpio.c


Ignore:
Timestamp:
Jan 1, 2014, 12:47:38 AM (10 years ago)
Author:
Bruno Cornec
Message:
  • Update mindi-busybox to 1.21.1
File:
1 edited

Legend:

Unmodified
Added
Removed
  • branches/3.2/mindi-busybox/archival/cpio.c

    r2725 r3232  
    1313 */
    1414#include "libbb.h"
    15 #include "archive.h"
     15#include "bb_archive.h"
     16
     17//usage:#define cpio_trivial_usage
     18//usage:       "[-dmvu] [-F FILE]" IF_FEATURE_CPIO_O(" [-H newc]")
     19//usage:       " [-ti"IF_FEATURE_CPIO_O("o")"]" IF_FEATURE_CPIO_P(" [-p DIR]")
     20//usage:       " [EXTR_FILE]..."
     21//usage:#define cpio_full_usage "\n\n"
     22//usage:       "Extract or list files from a cpio archive"
     23//usage:    IF_FEATURE_CPIO_O(", or"
     24//usage:     "\ncreate an archive" IF_FEATURE_CPIO_P(" (-o) or copy files (-p)")
     25//usage:        " using file list on stdin"
     26//usage:    )
     27//usage:     "\n"
     28//usage:     "\nMain operation mode:"
     29//usage:     "\n    -t  List"
     30//usage:     "\n    -i  Extract EXTR_FILEs (or all)"
     31//usage:    IF_FEATURE_CPIO_O(
     32//usage:     "\n    -o  Create (requires -H newc)"
     33//usage:    )
     34//usage:    IF_FEATURE_CPIO_P(
     35//usage:     "\n    -p DIR  Copy files to DIR"
     36//usage:    )
     37//usage:     "\n    -d  Make leading directories"
     38//usage:     "\n    -m  Preserve mtime"
     39//usage:     "\n    -v  Verbose"
     40//usage:     "\n    -u  Overwrite"
     41//usage:     "\n    -F FILE Input (-t,-i,-p) or output (-o) file"
     42//usage:    IF_FEATURE_CPIO_O(
     43//usage:     "\n    -H newc Archive format"
     44//usage:    )
    1645
    1746/* GNU cpio 2.9 --help (abridged):
     
    2150  -i, --extract              Extract files from an archive
    2251  -o, --create               Create the archive
    23   -p, --pass-through         Copy-pass mode [was ist das?!]
     52  -p, --pass-through         Copy-pass mode
    2453
    2554 Options valid in any mode:
     
    79108  -u, --unconditional        Replace all files unconditionally
    80109 */
     110
    81111enum {
    82     CPIO_OPT_EXTRACT            = (1 << 0),
    83     CPIO_OPT_TEST               = (1 << 1),
    84     CPIO_OPT_NUL_TERMINATED     = (1 << 2),
    85     CPIO_OPT_UNCONDITIONAL      = (1 << 3),
    86     CPIO_OPT_VERBOSE            = (1 << 4),
    87     CPIO_OPT_CREATE_LEADING_DIR = (1 << 5),
    88     CPIO_OPT_PRESERVE_MTIME     = (1 << 6),
    89     CPIO_OPT_DEREF              = (1 << 7),
    90     CPIO_OPT_FILE               = (1 << 8),
     112    OPT_EXTRACT            = (1 << 0),
     113    OPT_TEST               = (1 << 1),
     114    OPT_NUL_TERMINATED     = (1 << 2),
     115    OPT_UNCONDITIONAL      = (1 << 3),
     116    OPT_VERBOSE            = (1 << 4),
     117    OPT_CREATE_LEADING_DIR = (1 << 5),
     118    OPT_PRESERVE_MTIME     = (1 << 6),
     119    OPT_DEREF              = (1 << 7),
     120    OPT_FILE               = (1 << 8),
    91121    OPTBIT_FILE = 8,
    92122    IF_FEATURE_CPIO_O(OPTBIT_CREATE     ,)
     
    95125    IF_LONG_OPTS(     OPTBIT_QUIET      ,)
    96126    IF_LONG_OPTS(     OPTBIT_2STDOUT    ,)
    97     CPIO_OPT_CREATE             = IF_FEATURE_CPIO_O((1 << OPTBIT_CREATE     )) + 0,
    98     CPIO_OPT_FORMAT             = IF_FEATURE_CPIO_O((1 << OPTBIT_FORMAT     )) + 0,
    99     CPIO_OPT_PASSTHROUGH        = IF_FEATURE_CPIO_P((1 << OPTBIT_PASSTHROUGH)) + 0,
    100     CPIO_OPT_QUIET              = IF_LONG_OPTS(     (1 << OPTBIT_QUIET      )) + 0,
    101     CPIO_OPT_2STDOUT            = IF_LONG_OPTS(     (1 << OPTBIT_2STDOUT    )) + 0,
     127    OPT_CREATE             = IF_FEATURE_CPIO_O((1 << OPTBIT_CREATE     )) + 0,
     128    OPT_FORMAT             = IF_FEATURE_CPIO_O((1 << OPTBIT_FORMAT     )) + 0,
     129    OPT_PASSTHROUGH        = IF_FEATURE_CPIO_P((1 << OPTBIT_PASSTHROUGH)) + 0,
     130    OPT_QUIET              = IF_LONG_OPTS(     (1 << OPTBIT_QUIET      )) + 0,
     131    OPT_2STDOUT            = IF_LONG_OPTS(     (1 << OPTBIT_2STDOUT    )) + 0,
    102132};
    103133
     
    139169        struct stat st;
    140170
    141         line = (option_mask32 & CPIO_OPT_NUL_TERMINATED)
     171        line = (option_mask32 & OPT_NUL_TERMINATED)
    142172                ? bb_get_chunk_from_file(stdin, NULL)
    143173                : xmalloc_fgetline(stdin);
     
    154184                continue;
    155185            }
    156             if ((option_mask32 & CPIO_OPT_DEREF)
     186            if ((option_mask32 & OPT_DEREF)
    157187                    ? stat(name, &st)
    158188                    : lstat(name, &st)
     
    224254
    225255        bytes += printf("070701"
    226                         "%08X%08X%08X%08X%08X%08X%08X"
    227                         "%08X%08X%08X%08X" /* GNU cpio uses uppercase hex */
     256                "%08X%08X%08X%08X%08X%08X%08X"
     257                "%08X%08X%08X%08X" /* GNU cpio uses uppercase hex */
    228258                /* strlen+1: */ "%08X"
    229259                /* chksum: */   "00000000" /* (only for "070702" files) */
    230260                /* name,NUL: */ "%s%c",
    231                         (unsigned)(uint32_t) st.st_ino,
    232                         (unsigned)(uint32_t) st.st_mode,
    233                         (unsigned)(uint32_t) st.st_uid,
    234                         (unsigned)(uint32_t) st.st_gid,
    235                         (unsigned)(uint32_t) st.st_nlink,
    236                         (unsigned)(uint32_t) st.st_mtime,
    237                         (unsigned)(uint32_t) st.st_size,
    238                         (unsigned)(uint32_t) major(st.st_dev),
    239                         (unsigned)(uint32_t) minor(st.st_dev),
    240                         (unsigned)(uint32_t) major(st.st_rdev),
    241                         (unsigned)(uint32_t) minor(st.st_rdev),
    242                         (unsigned)(strlen(name) + 1),
    243                         name, '\0');
     261                (unsigned)(uint32_t) st.st_ino,
     262                (unsigned)(uint32_t) st.st_mode,
     263                (unsigned)(uint32_t) st.st_uid,
     264                (unsigned)(uint32_t) st.st_gid,
     265                (unsigned)(uint32_t) st.st_nlink,
     266                (unsigned)(uint32_t) st.st_mtime,
     267                (unsigned)(uint32_t) st.st_size,
     268                (unsigned)(uint32_t) major(st.st_dev),
     269                (unsigned)(uint32_t) minor(st.st_dev),
     270                (unsigned)(uint32_t) major(st.st_rdev),
     271                (unsigned)(uint32_t) minor(st.st_rdev),
     272                (unsigned)(strlen(name) + 1),
     273                name, '\0');
    244274        bytes = cpio_pad4(bytes);
    245275
     
    311341    opt = getopt32(argv, OPTION_STR, &cpio_filename);
    312342    argv += optind;
    313     if (opt & CPIO_OPT_FILE) { /* -F */
     343    if (opt & OPT_FILE) { /* -F */
    314344        xmove_fd(xopen(cpio_filename, O_RDONLY), STDIN_FILENO);
    315345    }
     
    317347    opt = getopt32(argv, OPTION_STR "oH:" IF_FEATURE_CPIO_P("p"), &cpio_filename, &cpio_fmt);
    318348    argv += optind;
    319     if ((opt & (CPIO_OPT_FILE|CPIO_OPT_CREATE)) == CPIO_OPT_FILE) { /* -F without -o */
     349    if ((opt & (OPT_FILE|OPT_CREATE)) == OPT_FILE) { /* -F without -o */
    320350        xmove_fd(xopen(cpio_filename, O_RDONLY), STDIN_FILENO);
    321351    }
    322     if (opt & CPIO_OPT_PASSTHROUGH) {
     352    if (opt & OPT_PASSTHROUGH) {
    323353        pid_t pid;
    324354        struct fd_pair pp;
     
    326356        if (argv[0] == NULL)
    327357            bb_show_usage();
    328         if (opt & CPIO_OPT_CREATE_LEADING_DIR)
     358        if (opt & OPT_CREATE_LEADING_DIR)
    329359            mkdir(argv[0], 0777);
    330360        /* Crude existence check:
     
    355385        }
    356386        /* parent */
     387        USE_FOR_NOMMU(argv[-optind][0] &= 0x7f); /* undo fork_or_rexec() damage */
    357388        xchdir(*argv++);
    358389        close(pp.wr);
    359390        xmove_fd(pp.rd, STDIN_FILENO);
    360         //opt &= ~CPIO_OPT_PASSTHROUGH;
    361         opt |= CPIO_OPT_EXTRACT;
     391        //opt &= ~OPT_PASSTHROUGH;
     392        opt |= OPT_EXTRACT;
    362393        goto skip;
    363394    }
    364395    /* -o */
    365     if (opt & CPIO_OPT_CREATE) {
     396    if (opt & OPT_CREATE) {
    366397        if (cpio_fmt[0] != 'n') /* we _require_ "-H newc" */
    367398            bb_show_usage();
    368         if (opt & CPIO_OPT_FILE) {
     399        if (opt & OPT_FILE) {
    369400            xmove_fd(xopen(cpio_filename, O_WRONLY | O_CREAT | O_TRUNC), STDOUT_FILENO);
    370401        }
     
    376407
    377408    /* One of either extract or test options must be given */
    378     if ((opt & (CPIO_OPT_TEST | CPIO_OPT_EXTRACT)) == 0) {
     409    if ((opt & (OPT_TEST | OPT_EXTRACT)) == 0) {
    379410        bb_show_usage();
    380411    }
    381412
    382     if (opt & CPIO_OPT_TEST) {
     413    if (opt & OPT_TEST) {
    383414        /* if both extract and test options are given, ignore extract option */
    384         opt &= ~CPIO_OPT_EXTRACT;
     415        opt &= ~OPT_EXTRACT;
    385416        archive_handle->action_header = header_list;
    386417    }
    387     if (opt & CPIO_OPT_EXTRACT) {
     418    if (opt & OPT_EXTRACT) {
    388419        archive_handle->action_data = data_extract_all;
    389         if (opt & CPIO_OPT_2STDOUT)
     420        if (opt & OPT_2STDOUT)
    390421            archive_handle->action_data = data_extract_to_stdout;
    391422    }
    392     if (opt & CPIO_OPT_UNCONDITIONAL) {
     423    if (opt & OPT_UNCONDITIONAL) {
    393424        archive_handle->ah_flags |= ARCHIVE_UNLINK_OLD;
    394425        archive_handle->ah_flags &= ~ARCHIVE_EXTRACT_NEWER;
    395426    }
    396     if (opt & CPIO_OPT_VERBOSE) {
     427    if (opt & OPT_VERBOSE) {
    397428        if (archive_handle->action_header == header_list) {
    398429            archive_handle->action_header = header_verbose_list;
     
    401432        }
    402433    }
    403     if (opt & CPIO_OPT_CREATE_LEADING_DIR) {
     434    if (opt & OPT_CREATE_LEADING_DIR) {
    404435        archive_handle->ah_flags |= ARCHIVE_CREATE_LEADING_DIRS;
    405436    }
    406     if (opt & CPIO_OPT_PRESERVE_MTIME) {
     437    if (opt & OPT_PRESERVE_MTIME) {
    407438        archive_handle->ah_flags |= ARCHIVE_RESTORE_DATE;
    408439    }
     
    420451
    421452    if (archive_handle->cpio__blocks != (off_t)-1
    422      && !(opt & CPIO_OPT_QUIET)
     453     && !(opt & OPT_QUIET)
    423454    ) {
    424455        fprintf(stderr, "%"OFF_FMT"u blocks\n", archive_handle->cpio__blocks);
Note: See TracChangeset for help on using the changeset viewer.