From: Eric Andersen Date: Thu, 21 Jun 2001 19:30:10 +0000 (-0000) Subject: Support tar -C, per bug #1176 X-Git-Tag: 0_52~86 X-Git-Url: https://git.librecmc.org/?a=commitdiff_plain;h=091781e20eb055ac286b5a617d53a50c7d6c451e;p=oweals%2Fbusybox.git Support tar -C, per bug #1176 -Erik --- diff --git a/applets/usage.h b/applets/usage.h index d68652fe5..acba3677c 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 8dec4349d..55fb12c2c 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 d68652fe5..acba3677c 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" \ diff --git a/tar.c b/tar.c index 8dec4349d..55fb12c2c 100644 --- 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 d68652fe5..acba3677c 100644 --- a/usage.h +++ b/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" \