cpio: improve help text; document two TODOs
authorDenys Vlasenko <vda.linux@googlemail.com>
Sat, 9 Jan 2010 18:56:15 +0000 (19:56 +0100)
committerDenys Vlasenko <vda.linux@googlemail.com>
Sat, 9 Jan 2010 18:56:15 +0000 (19:56 +0100)
Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
archival/cpio.c
archival/libunarchive/get_header_cpio.c
archival/libunarchive/header_list.c
include/usage.h

index b21ba6e797dd3e603649caab9ad11691c4acc7f6..be9fbd0b516006d0c84f5cac02160237ace000d2 100644 (file)
@@ -304,8 +304,12 @@ int cpio_main(int argc UNUSED_PARAM, char **argv)
        /* -L makes sense only with -o or -p */
 
 #if !ENABLE_FEATURE_CPIO_O
+       /* no parameters */
+       opt_complementary = "=0";
        opt = getopt32(argv, OPTION_STR, &cpio_filename);
 #else
+       /* _exactly_ one parameter for -p, thus <= 1 param if -p is allowed */
+       opt_complementary = ENABLE_FEATURE_CPIO_P ? "?1" : "=0";
        opt = getopt32(argv, OPTION_STR "oH:" IF_FEATURE_CPIO_P("p"), &cpio_filename, &cpio_fmt);
        argv += optind;
        if (opt & CPIO_OPT_PASSTHROUGH) {
@@ -346,13 +350,13 @@ int cpio_main(int argc UNUSED_PARAM, char **argv)
                xchdir(*argv++);
                close(pp.wr);
                xmove_fd(pp.rd, STDIN_FILENO);
-               opt &= ~CPIO_OPT_PASSTHROUGH;
+               //opt &= ~CPIO_OPT_PASSTHROUGH;
                opt |= CPIO_OPT_EXTRACT;
                goto skip;
        }
        /* -o */
        if (opt & CPIO_OPT_CREATE) {
-               if (*cpio_fmt != 'n') /* we _require_ "-H newc" */
+               if (cpio_fmt[0] != 'n') /* we _require_ "-H newc" */
                        bb_show_usage();
                if (opt & CPIO_OPT_FILE) {
                        xmove_fd(xopen3(cpio_filename, O_WRONLY | O_CREAT | O_TRUNC, 0666), STDOUT_FILENO);
index ddc49f70eeb066c2ac41847a5c6db53690b609db..4507d538b03bab5e0101a2fc8e296fbf3cc562bb 100644 (file)
@@ -115,6 +115,10 @@ char FAST_FUNC get_header_cpio(archive_handle_t *archive_handle)
 
        if (archive_handle->filter(archive_handle) == EXIT_SUCCESS) {
                archive_handle->action_data(archive_handle);
+//TODO: run "echo /etc/hosts | cpio -pv /tmp" twice. On 2nd run:
+//cpio: etc/hosts not created: newer or same age file exists
+//etc/hosts  <-- should NOT show it
+//2 blocks <-- should say "0 blocks"
                archive_handle->action_header(file_header);
        } else {
                data_skip(archive_handle);
index 6ec2df36364d1a67eaef81d9afb2fd8c2dc90e1d..b1c425aca457ec6526ac988081f43349217fec88 100644 (file)
@@ -7,5 +7,6 @@
 
 void FAST_FUNC header_list(const file_header_t *file_header)
 {
+//TODO: cpio -vp DIR should output "DIR/NAME", not just "NAME" */
        puts(file_header->name);
 }
index 8c11ac4666cb990c07801409013eaaa05a2d23c0..65836d8cea9417666f32c37bc918b108764cb5ad 100644 (file)
      "\n       -l,-s   Create (sym)links" \
 
 #define cpio_trivial_usage \
-       "-[ti" IF_FEATURE_CPIO_O("o") IF_FEATURE_CPIO_P("p") "dmvu] [-F FILE]" \
-       IF_FEATURE_CPIO_O( " [-H newc]" )
+       "[-ti" IF_FEATURE_CPIO_O("o") "]" IF_FEATURE_CPIO_P(" [-p DIR]") \
+       " [-dmvu] [-F FILE]" IF_FEATURE_CPIO_O(" [-H newc]")
 #define cpio_full_usage "\n\n" \
        "Extract or list files from a cpio archive" \
-       IF_FEATURE_CPIO_O( ", or create a cpio archive" ) \
+       IF_FEATURE_CPIO_O(", or" \
+     "\ncreate an archive" IF_FEATURE_CPIO_P(" (-o) or copy files (-p)") \
+               " using file list on standard input" \
+       ) \
+     "\n" \
      "\nMain operation mode:" \
      "\n       -t      List" \
      "\n       -i      Extract" \
      "\n       -o      Create" \
        ) \
        IF_FEATURE_CPIO_P( \
-     "\n       -p      Passthrough" \
+     "\n       -p DIR  Copy files to DIR" \
        ) \
      "\nOptions:" \
      "\n       -d      Make leading directories" \