]> git.ipfire.org Git - thirdparty/libarchive.git/commitdiff
Set uname and gname before calling a time filter callback.
authorMichihiro NAKAJIMA <ggcueroad@gmail.com>
Sun, 1 Jan 2012 21:27:53 +0000 (16:27 -0500)
committerMichihiro NAKAJIMA <ggcueroad@gmail.com>
Sun, 1 Jan 2012 21:27:53 +0000 (16:27 -0500)
SVN-Revision: 4068

libarchive/archive_read_disk_entry_from_file.c
libarchive/archive_read_disk_posix.c
libarchive/archive_read_disk_windows.c

index 8a83dfe22f6664c49923fa63460f8c91933f5d07..9158651adc10d466928cc65061ca3070fef81b1a 100644 (file)
@@ -165,16 +165,15 @@ archive_read_disk_entry_from_file(struct archive *_a,
                        st = &s;
                }
                archive_entry_copy_stat(entry, st);
+               /* Lookup uname/gname */
+               name = archive_read_disk_uname(_a, archive_entry_uid(entry));
+               if (name != NULL)
+                       archive_entry_copy_uname(entry, name);
+               name = archive_read_disk_gname(_a, archive_entry_gid(entry));
+               if (name != NULL)
+                       archive_entry_copy_gname(entry, name);
        }
 
-       /* Lookup uname/gname */
-       name = archive_read_disk_uname(_a, archive_entry_uid(entry));
-       if (name != NULL)
-               archive_entry_copy_uname(entry, name);
-       name = archive_read_disk_gname(_a, archive_entry_gid(entry));
-       if (name != NULL)
-               archive_entry_copy_gname(entry, name);
-
 #ifdef HAVE_STRUCT_STAT_ST_FLAGS
        /* On FreeBSD, we get flags for free with the stat. */
        /* TODO: Does this belong in copy_stat()? */
index 2987063d64d18720039048a1b40fc6d5cea1db67..4e504cefce80f55416844858d5b21e80a63ce799 100644 (file)
@@ -831,6 +831,7 @@ _archive_read_next_header2(struct archive *_a, struct archive_entry *entry)
        struct tree *t;
        const struct stat *st; /* info to use for this entry */
        const struct stat *lst;/* lstat() information */
+       const char *name;
        int descend, fd = -1, r;
 
        archive_check_magic(_a, ARCHIVE_READ_DISK_MAGIC,
@@ -932,12 +933,17 @@ next_entry:
        t->descend = descend;
 
        archive_entry_copy_stat(entry, st);
+       /* Lookup uname/gname */
+       name = archive_read_disk_uname(_a, archive_entry_uid(entry));
+       if (name != NULL)
+               archive_entry_copy_uname(entry, name);
+       name = archive_read_disk_gname(_a, archive_entry_gid(entry));
+       if (name != NULL)
+               archive_entry_copy_gname(entry, name);
+       /* Invoke a filter callback. */
        if (a->time_filter_func) {
                if (!a->time_filter_func(_a, a->time_filter_data, entry)) {
-                       archive_entry_unset_atime(entry);
-                       archive_entry_unset_birthtime(entry);
-                       archive_entry_unset_ctime(entry);
-                       archive_entry_unset_mtime(entry);
+                       archive_entry_clear(entry);
                        goto next_entry;
                }
        }
@@ -945,10 +951,7 @@ next_entry:
 #if defined(HAVE_STRUCT_STAT_ST_FLAGS) && defined(UF_NODUMP)
        if (a->honor_nodump) {
                if (st->st_flags & UF_NODUMP) {
-                       archive_entry_unset_atime(entry);
-                       archive_entry_unset_birthtime(entry);
-                       archive_entry_unset_ctime(entry);
-                       archive_entry_unset_mtime(entry);
+                       archive_entry_clear(entry);
                        goto next_entry;
                }
        }
@@ -1000,10 +1003,7 @@ next_entry:
                unsigned long flags, clear;
                archive_entry_fflags(entry, &flags, &clear);
                if (flags & EXT2_NODUMP_FL) {
-                       archive_entry_unset_atime(entry);
-                       archive_entry_unset_birthtime(entry);
-                       archive_entry_unset_ctime(entry);
-                       archive_entry_unset_mtime(entry);
+                       archive_entry_clear(entry);
                        goto next_entry;
                }
        }
index 738be9fb308e6e8900c8e15c6e870778780c1c66..fa25c9cc542974fee8ad6890598214815656d9ca 100644 (file)
@@ -781,12 +781,17 @@ next_entry:
        t->descend = descend;
 
        tree_archive_entry_copy_bhfi(entry, t, st);
+       /* Lookup uname/gname */
+       name = archive_read_disk_uname(_a, archive_entry_uid(entry));
+       if (name != NULL)
+               archive_entry_copy_uname(entry, name);
+       name = archive_read_disk_gname(_a, archive_entry_gid(entry));
+       if (name != NULL)
+               archive_entry_copy_gname(entry, name);
+       /* Invoke a filter callback. */
        if (a->time_filter_func) {
                if (!a->time_filter_func(_a, a->time_filter_data, entry)) {
-                       archive_entry_unset_atime(entry);
-                       archive_entry_unset_birthtime(entry);
-                       archive_entry_unset_ctime(entry);
-                       archive_entry_unset_mtime(entry);
+                       archive_entry_clear(entry);
                        goto next_entry;
                }
        }
@@ -797,14 +802,6 @@ next_entry:
        t->restore_time.lastAccessTime = st->ftLastAccessTime;
        t->restore_time.filetype = archive_entry_filetype(entry);
 
-       /* Lookup uname/gname */
-       name = archive_read_disk_uname(_a, archive_entry_uid(entry));
-       if (name != NULL)
-               archive_entry_copy_uname(entry, name);
-       name = archive_read_disk_gname(_a, archive_entry_gid(entry));
-       if (name != NULL)
-               archive_entry_copy_gname(entry, name);
-
        r = ARCHIVE_OK;
        if (archive_entry_filetype(entry) == AE_IFREG &&
            archive_entry_size(entry) > 0) {