From: Michihiro NAKAJIMA Date: Sun, 1 Jan 2012 21:27:53 +0000 (-0500) Subject: Set uname and gname before calling a time filter callback. X-Git-Tag: v3.0.4~2^2~231 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=2d515301cd5f6409c234739620d03e64681a47bd;p=thirdparty%2Flibarchive.git Set uname and gname before calling a time filter callback. SVN-Revision: 4068 --- diff --git a/libarchive/archive_read_disk_entry_from_file.c b/libarchive/archive_read_disk_entry_from_file.c index 8a83dfe22..9158651ad 100644 --- a/libarchive/archive_read_disk_entry_from_file.c +++ b/libarchive/archive_read_disk_entry_from_file.c @@ -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()? */ diff --git a/libarchive/archive_read_disk_posix.c b/libarchive/archive_read_disk_posix.c index 2987063d6..4e504cefc 100644 --- a/libarchive/archive_read_disk_posix.c +++ b/libarchive/archive_read_disk_posix.c @@ -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; } } diff --git a/libarchive/archive_read_disk_windows.c b/libarchive/archive_read_disk_windows.c index 738be9fb3..fa25c9cc5 100644 --- a/libarchive/archive_read_disk_windows.c +++ b/libarchive/archive_read_disk_windows.c @@ -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) {