diff options
author | Denis Vlasenko <vda.linux@googlemail.com> | 2009-04-21 00:52:21 +0000 |
---|---|---|
committer | Denis Vlasenko <vda.linux@googlemail.com> | 2009-04-21 00:52:21 +0000 |
commit | 8b814b4a349e2262c0ad25793b05206a14651ebb (patch) | |
tree | d58a9a4b05e6c662d1ccdcca8da82173d52c1e4b /archival/libunarchive | |
parent | 76478b8091d4c3472fb0c7e572c350d150ecd459 (diff) | |
download | busybox-w32-8b814b4a349e2262c0ad25793b05206a14651ebb.tar.gz busybox-w32-8b814b4a349e2262c0ad25793b05206a14651ebb.tar.bz2 busybox-w32-8b814b4a349e2262c0ad25793b05206a14651ebb.zip |
tar: support for tar --numeric-owner. By Natanael Copa.
function old new delta
tar_longopts 221 237 +16
data_extract_all 692 705 +13
tar_main 690 702 +12
Diffstat (limited to 'archival/libunarchive')
-rw-r--r-- | archival/libunarchive/data_extract_all.c | 30 |
1 files changed, 16 insertions, 14 deletions
diff --git a/archival/libunarchive/data_extract_all.c b/archival/libunarchive/data_extract_all.c index 8b1ee2a6e..a2dfcb9e1 100644 --- a/archival/libunarchive/data_extract_all.c +++ b/archival/libunarchive/data_extract_all.c | |||
@@ -114,22 +114,24 @@ void FAST_FUNC data_extract_all(archive_handle_t *archive_handle) | |||
114 | } | 114 | } |
115 | 115 | ||
116 | if (!(archive_handle->ah_flags & ARCHIVE_NOPRESERVE_OWN)) { | 116 | if (!(archive_handle->ah_flags & ARCHIVE_NOPRESERVE_OWN)) { |
117 | #if ENABLE_FEATURE_TAR_UNAME_GNAME | 117 | if (ENABLE_FEATURE_TAR_UNAME_GNAME |
118 | uid_t uid = file_header->uid; | 118 | && !(archive_handle->ah_flags & ARCHIVE_NUMERIC_OWNER) |
119 | gid_t gid = file_header->gid; | 119 | ) { |
120 | uid_t uid = file_header->uid; | ||
121 | gid_t gid = file_header->gid; | ||
120 | 122 | ||
121 | if (file_header->uname) { | 123 | if (file_header->uname) { |
122 | struct passwd *pwd = getpwnam(file_header->uname); | 124 | struct passwd *pwd = getpwnam(file_header->uname); |
123 | if (pwd) uid = pwd->pw_uid; | 125 | if (pwd) uid = pwd->pw_uid; |
124 | } | 126 | } |
125 | if (file_header->gname) { | 127 | if (file_header->gname) { |
126 | struct group *grp = getgrnam(file_header->gname); | 128 | struct group *grp = getgrnam(file_header->gname); |
127 | if (grp) gid = grp->gr_gid; | 129 | if (grp) gid = grp->gr_gid; |
130 | } | ||
131 | lchown(file_header->name, uid, gid); | ||
132 | } else { | ||
133 | lchown(file_header->name, file_header->uid, file_header->gid); | ||
128 | } | 134 | } |
129 | lchown(file_header->name, uid, gid); | ||
130 | #else | ||
131 | lchown(file_header->name, file_header->uid, file_header->gid); | ||
132 | #endif | ||
133 | } | 135 | } |
134 | if ((file_header->mode & S_IFMT) != S_IFLNK) { | 136 | if ((file_header->mode & S_IFMT) != S_IFLNK) { |
135 | /* uclibc has no lchmod, glibc is even stranger - | 137 | /* uclibc has no lchmod, glibc is even stranger - |