diff options
author | brian <brian@FreeBSD.org> | 2005-01-12 03:25:55 +0000 |
---|---|---|
committer | brian <brian@FreeBSD.org> | 2005-01-12 03:25:55 +0000 |
commit | 0e5f9d308c2be2196ee2a45a270472a13d2c6e67 (patch) | |
tree | 6078adfd93dcb4c40972d27708b9624be4722673 /bin/pax | |
parent | 274b15afc6bb492ccf9a20d63dc67c0a170d9ae6 (diff) | |
download | FreeBSD-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.c | 8 | ||||
-rw-r--r-- | bin/pax/extern.h | 1 | ||||
-rw-r--r-- | bin/pax/ftree.c | 12 |
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) |