Support tar -C, per bug #1176
authorEric Andersen <andersen@codepoet.org>
Thu, 21 Jun 2001 19:30:10 +0000 (19:30 -0000)
committerEric Andersen <andersen@codepoet.org>
Thu, 21 Jun 2001 19:30:10 +0000 (19:30 -0000)
 -Erik

applets/usage.h
archival/tar.c
include/usage.h
tar.c
usage.h

index d68652fe51485578b11e88bd5483c3acc055f1b8..acba3677c34a15ac29ac06cb5a9641e829e960d2 100644 (file)
        "221 foobar closing connection\n" 
 
 #define nslookup_trivial_usage \
-       "[HOST]"
+       "[HOST] [SERVER]"
 #define nslookup_full_usage \
-       "Queries the nameserver for the IP address of the given HOST"
+       "Queries the nameserver for the IP address of the given HOST\n" \
+       "optionally using a specified DNS server"
 #define nslookup_example_usage \
        "$ nslookup localhost\n" \
        "Server:     default\n" \
 #define tar_trivial_usage \
        "-[" USAGE_TAR_CREATE("c") "xtvO] " \
        USAGE_TAR_EXCLUDE("[--exclude FILE] [-X FILE]") \
-       "[-f TARFILE] [FILE(s)] ..."
+       "[-f TARFILE] [-C DIR] [FILE(s)] ..."
 #define tar_full_usage \
        "Create, extract, or list files from a tar file.\n\n" \
-       "Main operation mode:\n" \
+       "Options:\n" \
        USAGE_TAR_CREATE("\tc\t\tcreate\n") \
        "\tx\t\textract\n" \
        "\tt\t\tlist\n" \
        "\texclude\t\tfile to exclude\n" \
         "\tX\t\tfile with names to exclude\n" \
        ) \
-       "\nInformative output:\n" \
+       "\tC\t\tchange to directory DIR before operation\n" \
        "\tv\t\tverbosely list files processed"
 #define tar_example_usage \
        "$ zcat /tmp/tarball.tar.gz | tar -xf -\n" \
index 8dec4349d3f4a94892029b033856a6f2f540e03a..55fb12c2ca699fc87fbc72c97844b38779d11179 100644 (file)
@@ -151,6 +151,7 @@ extern int tar_main(int argc, char **argv)
        char** excludeList=NULL;
        char** extractList=NULL;
        const char *tarName="-";
+       const char *cwd=NULL;
 #if defined BB_FEATURE_TAR_EXCLUDE
        int excludeListSize=0;
        FILE *fileList;
@@ -181,9 +182,9 @@ extern int tar_main(int argc, char **argv)
 
        while (
 #ifndef BB_FEATURE_TAR_EXCLUDE
-                       (opt = getopt(argc, argv, "cxtzvOf:p"))
+                       (opt = getopt(argc, argv, "cxtzvOf:pC:"))
 #else
-                       (opt = getopt_long(argc, argv, "cxtzvOf:X:p", longopts, NULL))
+                       (opt = getopt_long(argc, argv, "cxtzvOf:X:pC:", longopts, NULL))
 #endif
                        > 0) {
                switch (opt) {
@@ -240,6 +241,13 @@ extern int tar_main(int argc, char **argv)
 #endif
                        case 'p':
                                break;
+                       case 'C':
+                               cwd = xgetcwd((char *)cwd);
+                               if (chdir(optarg)) {
+                                       printf("cd: %s: %s\n", optarg, strerror(errno));
+                                       return EXIT_FAILURE;
+                               }
+                               break;
                        default:
                                        show_usage();
                }
@@ -292,6 +300,8 @@ extern int tar_main(int argc, char **argv)
 #endif                 
        }
 
+       if (cwd)
+               chdir(cwd);
        if (status == TRUE)
                return EXIT_SUCCESS;
        else
index d68652fe51485578b11e88bd5483c3acc055f1b8..acba3677c34a15ac29ac06cb5a9641e829e960d2 100644 (file)
        "221 foobar closing connection\n" 
 
 #define nslookup_trivial_usage \
-       "[HOST]"
+       "[HOST] [SERVER]"
 #define nslookup_full_usage \
-       "Queries the nameserver for the IP address of the given HOST"
+       "Queries the nameserver for the IP address of the given HOST\n" \
+       "optionally using a specified DNS server"
 #define nslookup_example_usage \
        "$ nslookup localhost\n" \
        "Server:     default\n" \
 #define tar_trivial_usage \
        "-[" USAGE_TAR_CREATE("c") "xtvO] " \
        USAGE_TAR_EXCLUDE("[--exclude FILE] [-X FILE]") \
-       "[-f TARFILE] [FILE(s)] ..."
+       "[-f TARFILE] [-C DIR] [FILE(s)] ..."
 #define tar_full_usage \
        "Create, extract, or list files from a tar file.\n\n" \
-       "Main operation mode:\n" \
+       "Options:\n" \
        USAGE_TAR_CREATE("\tc\t\tcreate\n") \
        "\tx\t\textract\n" \
        "\tt\t\tlist\n" \
        "\texclude\t\tfile to exclude\n" \
         "\tX\t\tfile with names to exclude\n" \
        ) \
-       "\nInformative output:\n" \
+       "\tC\t\tchange to directory DIR before operation\n" \
        "\tv\t\tverbosely list files processed"
 #define tar_example_usage \
        "$ zcat /tmp/tarball.tar.gz | tar -xf -\n" \
diff --git a/tar.c b/tar.c
index 8dec4349d3f4a94892029b033856a6f2f540e03a..55fb12c2ca699fc87fbc72c97844b38779d11179 100644 (file)
--- a/tar.c
+++ b/tar.c
@@ -151,6 +151,7 @@ extern int tar_main(int argc, char **argv)
        char** excludeList=NULL;
        char** extractList=NULL;
        const char *tarName="-";
+       const char *cwd=NULL;
 #if defined BB_FEATURE_TAR_EXCLUDE
        int excludeListSize=0;
        FILE *fileList;
@@ -181,9 +182,9 @@ extern int tar_main(int argc, char **argv)
 
        while (
 #ifndef BB_FEATURE_TAR_EXCLUDE
-                       (opt = getopt(argc, argv, "cxtzvOf:p"))
+                       (opt = getopt(argc, argv, "cxtzvOf:pC:"))
 #else
-                       (opt = getopt_long(argc, argv, "cxtzvOf:X:p", longopts, NULL))
+                       (opt = getopt_long(argc, argv, "cxtzvOf:X:pC:", longopts, NULL))
 #endif
                        > 0) {
                switch (opt) {
@@ -240,6 +241,13 @@ extern int tar_main(int argc, char **argv)
 #endif
                        case 'p':
                                break;
+                       case 'C':
+                               cwd = xgetcwd((char *)cwd);
+                               if (chdir(optarg)) {
+                                       printf("cd: %s: %s\n", optarg, strerror(errno));
+                                       return EXIT_FAILURE;
+                               }
+                               break;
                        default:
                                        show_usage();
                }
@@ -292,6 +300,8 @@ extern int tar_main(int argc, char **argv)
 #endif                 
        }
 
+       if (cwd)
+               chdir(cwd);
        if (status == TRUE)
                return EXIT_SUCCESS;
        else
diff --git a/usage.h b/usage.h
index d68652fe51485578b11e88bd5483c3acc055f1b8..acba3677c34a15ac29ac06cb5a9641e829e960d2 100644 (file)
--- a/usage.h
+++ b/usage.h
        "221 foobar closing connection\n" 
 
 #define nslookup_trivial_usage \
-       "[HOST]"
+       "[HOST] [SERVER]"
 #define nslookup_full_usage \
-       "Queries the nameserver for the IP address of the given HOST"
+       "Queries the nameserver for the IP address of the given HOST\n" \
+       "optionally using a specified DNS server"
 #define nslookup_example_usage \
        "$ nslookup localhost\n" \
        "Server:     default\n" \
 #define tar_trivial_usage \
        "-[" USAGE_TAR_CREATE("c") "xtvO] " \
        USAGE_TAR_EXCLUDE("[--exclude FILE] [-X FILE]") \
-       "[-f TARFILE] [FILE(s)] ..."
+       "[-f TARFILE] [-C DIR] [FILE(s)] ..."
 #define tar_full_usage \
        "Create, extract, or list files from a tar file.\n\n" \
-       "Main operation mode:\n" \
+       "Options:\n" \
        USAGE_TAR_CREATE("\tc\t\tcreate\n") \
        "\tx\t\textract\n" \
        "\tt\t\tlist\n" \
        "\texclude\t\tfile to exclude\n" \
         "\tX\t\tfile with names to exclude\n" \
        ) \
-       "\nInformative output:\n" \
+       "\tC\t\tchange to directory DIR before operation\n" \
        "\tv\t\tverbosely list files processed"
 #define tar_example_usage \
        "$ zcat /tmp/tarball.tar.gz | tar -xf -\n" \