summaryrefslogtreecommitdiffstats
path: root/bin/pax
diff options
context:
space:
mode:
authorbrian <brian@FreeBSD.org>2005-01-12 03:25:55 +0000
committerbrian <brian@FreeBSD.org>2005-01-12 03:25:55 +0000
commit0e5f9d308c2be2196ee2a45a270472a13d2c6e67 (patch)
tree6078adfd93dcb4c40972d27708b9624be4722673 /bin/pax
parent274b15afc6bb492ccf9a20d63dc67c0a170d9ae6 (diff)
downloadFreeBSD-src-0e5f9d308c2be2196ee2a45a270472a13d2c6e67.zip
FreeBSD-src-0e5f9d308c2be2196ee2a45a270472a13d2c6e67.tar.gz
Don't decend into directories when -d is set and the directory itself doesn't
match. PR: 28095 Submitted by: bill at twwells dot com MFC after: 7 days
Diffstat (limited to 'bin/pax')
-rw-r--r--bin/pax/ar_subs.c8
-rw-r--r--bin/pax/extern.h1
-rw-r--r--bin/pax/ftree.c12
3 files changed, 19 insertions, 2 deletions
diff --git a/bin/pax/ar_subs.c b/bin/pax/ar_subs.c
index f16facf..da275c2d 100644
--- a/bin/pax/ar_subs.c
+++ b/bin/pax/ar_subs.c
@@ -400,8 +400,10 @@ wr_archive(ARCHD *arcn, int is_app)
/*
* check if this file meets user specified options match.
*/
- if (sel_chk(arcn) != 0)
+ if (sel_chk(arcn) != 0) {
+ ftree_notsel();
continue;
+ }
fd = -1;
if (uflag) {
/*
@@ -785,8 +787,10 @@ copy(void)
/*
* check if this file meets user specified options
*/
- if (sel_chk(arcn) != 0)
+ if (sel_chk(arcn) != 0) {
+ ftree_notsel();
continue;
+ }
/*
* if there is already a file in the destination directory with
diff --git a/bin/pax/extern.h b/bin/pax/extern.h
index b0d0237..e716792 100644
--- a/bin/pax/extern.h
+++ b/bin/pax/extern.h
@@ -155,6 +155,7 @@ int set_crc(ARCHD *, int);
int ftree_start(void);
int ftree_add(char *, int);
void ftree_sel(ARCHD *);
+void ftree_notsel(void);
void ftree_chk(void);
int next_file(ARCHD *);
diff --git a/bin/pax/ftree.c b/bin/pax/ftree.c
index 36c0de5..f402c56 100644
--- a/bin/pax/ftree.c
+++ b/bin/pax/ftree.c
@@ -214,6 +214,18 @@ ftree_sel(ARCHD *arcn)
}
/*
+ * ftree_notsel()
+ * this entry has not been selected by pax.
+ */
+
+void
+ftree_notsel()
+{
+ if (ftent != NULL)
+ (void)fts_set(ftsp, ftent, FTS_SKIP);
+}
+
+/*
* ftree_chk()
* called at end on pax execution. Prints all those file args that did not
* have a selected member (reference count still 0)
OpenPOWER on IntegriCloud