diff options
author | Eric Andersen | 2001-06-21 19:30:10 +0000 |
---|---|---|
committer | Eric Andersen | 2001-06-21 19:30:10 +0000 |
commit | 091781e20eb055ac286b5a617d53a50c7d6c451e (patch) | |
tree | 2be329d957ce48547b950cc1c56d14d32096b055 | |
parent | 8a646dd2933bc37e67e1b09fd3461816e38fc677 (diff) | |
download | busybox-091781e20eb055ac286b5a617d53a50c7d6c451e.zip busybox-091781e20eb055ac286b5a617d53a50c7d6c451e.tar.gz |
Support tar -C, per bug #1176
-Erik
-rw-r--r-- | applets/usage.h | 11 | ||||
-rw-r--r-- | archival/tar.c | 14 | ||||
-rw-r--r-- | include/usage.h | 11 | ||||
-rw-r--r-- | tar.c | 14 | ||||
-rw-r--r-- | usage.h | 11 |
5 files changed, 42 insertions, 19 deletions
diff --git a/applets/usage.h b/applets/usage.h index d68652f..acba367 100644 --- a/applets/usage.h +++ b/applets/usage.h @@ -1154,9 +1154,10 @@ "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" \ @@ -1469,10 +1470,10 @@ #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" \ @@ -1483,7 +1484,7 @@ "\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/archival/tar.c b/archival/tar.c index 8dec434..55fb12c 100644 --- a/archival/tar.c +++ b/archival/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/include/usage.h b/include/usage.h index d68652f..acba367 100644 --- a/include/usage.h +++ b/include/usage.h @@ -1154,9 +1154,10 @@ "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" \ @@ -1469,10 +1470,10 @@ #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" \ @@ -1483,7 +1484,7 @@ "\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" \ @@ -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 @@ -1154,9 +1154,10 @@ "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" \ @@ -1469,10 +1470,10 @@ #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" \ @@ -1483,7 +1484,7 @@ "\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" \ |