summaryrefslogtreecommitdiffstats
path: root/gnu
diff options
context:
space:
mode:
authornectar <nectar@FreeBSD.org>1998-07-27 18:40:09 +0000
committernectar <nectar@FreeBSD.org>1998-07-27 18:40:09 +0000
commit084c8c66276ff27072f5b898b4aa8f7153d1464b (patch)
treeebe546714eefb4be9eec58b43e6fa438232d8524 /gnu
parent9ac87e4b580e02b3a3dfcc2bdfd9641631106037 (diff)
downloadFreeBSD-src-084c8c66276ff27072f5b898b4aa8f7153d1464b.zip
FreeBSD-src-084c8c66276ff27072f5b898b4aa8f7153d1464b.tar.gz
fixed: tar will extract file even if -C command fails
tar now exits with new exit code EX_BADDIR after a failed chdir() in name_next(), name_match(), and name_from_list(). PR: bin/2394 Submitted by: Satoshi Asami <asami@freebsd.org>
Diffstat (limited to 'gnu')
-rw-r--r--gnu/usr.bin/tar/tar.c20
-rw-r--r--gnu/usr.bin/tar/tar.h1
2 files changed, 16 insertions, 5 deletions
diff --git a/gnu/usr.bin/tar/tar.c b/gnu/usr.bin/tar/tar.c
index c71202b..7b813e5 100644
--- a/gnu/usr.bin/tar/tar.c
+++ b/gnu/usr.bin/tar/tar.c
@@ -924,8 +924,10 @@ tryagain:
}
if (q)
{
- if (chdir (p) < 0)
+ if (chdir (p) < 0) {
msg_perror ("Can't chdir to %s", p);
+ exit(EX_BADDIR);
+ }
q = 0;
goto tryagain;
}
@@ -1152,8 +1154,10 @@ again:
return 1;
if (nlp->fake)
{
- if (nlp->change_dir && chdir (nlp->change_dir))
+ if (nlp->change_dir && chdir (nlp->change_dir)) {
msg_perror ("Can't change to directory %s", nlp->change_dir);
+ exit(EX_BADDIR);
+ }
namelist = 0;
return 1;
}
@@ -1175,8 +1179,10 @@ again:
free ((void *) namelist);
namelist = 0;
}
- if (nlp->change_dir && chdir (nlp->change_dir))
+ if (nlp->change_dir && chdir (nlp->change_dir)) {
msg_perror ("Can't change to directory %s", nlp->change_dir);
+ exit(EX_BADDIR);
+ }
return 1; /* We got a match */
}
continue;
@@ -1194,8 +1200,10 @@ again:
free ((void *) namelist);
namelist = 0;
}
- if (nlp->change_dir && chdir (nlp->change_dir))
+ if (nlp->change_dir && chdir (nlp->change_dir)) {
msg_perror ("Can't change to directory %s", nlp->change_dir);
+ exit(EX_BADDIR);
+ }
if (f_fast_read) {
if (strcmp(p, nlp->name) == 0) {
/* remove the current entry, since we found a match */
@@ -1361,8 +1369,10 @@ name_from_list ()
{
gnu_list_name->found++;
if (gnu_list_name->change_dir)
- if (chdir (gnu_list_name->change_dir) < 0)
+ if (chdir (gnu_list_name->change_dir) < 0) {
msg_perror ("can't chdir to %s", gnu_list_name->change_dir);
+ exit(EX_BADDIR);
+ }
return gnu_list_name->name;
}
return (char *) 0;
diff --git a/gnu/usr.bin/tar/tar.h b/gnu/usr.bin/tar/tar.h
index 72b190c..90cf392 100644
--- a/gnu/usr.bin/tar/tar.h
+++ b/gnu/usr.bin/tar/tar.h
@@ -151,6 +151,7 @@ union record
#define EX_BADVOL 5 /* Special error code means
Tape volume doesn't match the one
specified on the command line */
+#define EX_BADDIR 6 /* bad directory name */
/*
* Global variables
OpenPOWER on IntegriCloud