aboutsummaryrefslogtreecommitdiff
path: root/lib
diff options
context:
space:
mode:
authorTim Kientzle <kientzle@FreeBSD.org>2008-08-24 05:01:01 +0000
committerTim Kientzle <kientzle@FreeBSD.org>2008-08-24 05:01:01 +0000
commit8d14bd8cc2317a75d8450819a5d31bb772475fca (patch)
tree673def88b2cf3088dcecd8aa8a1350184449a74a /lib
parentc9c5c49045ab5ea791924cbcad6db84c8abbc1e7 (diff)
downloadsrc-8d14bd8cc2317a75d8450819a5d31bb772475fca.tar.gz
src-8d14bd8cc2317a75d8450819a5d31bb772475fca.zip
Fix the cpio bug tested for by r182092 of usr.bin/cpio/test.
Since various 'find' incantations can emit container directories in various orders, we cannot refuse to update a dir because it's apparently the same age. MFC after: 3 days
Notes
Notes: svn path=/head/; revision=182093
Diffstat (limited to 'lib')
-rw-r--r--lib/libarchive/archive_write_disk.c6
1 files changed, 5 insertions, 1 deletions
diff --git a/lib/libarchive/archive_write_disk.c b/lib/libarchive/archive_write_disk.c
index 7e44613367a4..3fdea0e5bdf9 100644
--- a/lib/libarchive/archive_write_disk.c
+++ b/lib/libarchive/archive_write_disk.c
@@ -861,7 +861,11 @@ restore_entry(struct archive_write_disk *a)
/* TODO: if it's a symlink... */
- if (a->flags & ARCHIVE_EXTRACT_NO_OVERWRITE_NEWER) {
+ /*
+ * NO_OVERWRITE_NEWER doesn't apply to directories.
+ */
+ if ((a->flags & ARCHIVE_EXTRACT_NO_OVERWRITE_NEWER)
+ && !S_ISDIR(a->st.st_mode)) {
if (!older(&(a->st), a->entry)) {
archive_set_error(&a->archive, 0,
"File on disk is not older; skipping.");