summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorEric Andersen2001-06-21 19:30:10 +0000
committerEric Andersen2001-06-21 19:30:10 +0000
commit091781e20eb055ac286b5a617d53a50c7d6c451e (patch)
tree2be329d957ce48547b950cc1c56d14d32096b055
parent8a646dd2933bc37e67e1b09fd3461816e38fc677 (diff)
downloadbusybox-091781e20eb055ac286b5a617d53a50c7d6c451e.zip
busybox-091781e20eb055ac286b5a617d53a50c7d6c451e.tar.gz
Support tar -C, per bug #1176
-Erik
-rw-r--r--applets/usage.h11
-rw-r--r--archival/tar.c14
-rw-r--r--include/usage.h11
-rw-r--r--tar.c14
-rw-r--r--usage.h11
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" \
diff --git a/tar.c b/tar.c
index 8dec434..55fb12c 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 d68652f..acba367 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" \