diff options
Diffstat (limited to 'archival')
-rw-r--r-- | archival/Config.src | 2 | ||||
-rw-r--r-- | archival/Kbuild.src | 3 | ||||
-rw-r--r-- | archival/dpkg_deb.c | 9 | ||||
-rw-r--r-- | archival/libunarchive/Kbuild.src | 2 | ||||
-rw-r--r-- | archival/libunarchive/data_extract_all.c | 31 |
5 files changed, 27 insertions, 20 deletions
diff --git a/archival/Config.src b/archival/Config.src index de453bc21..3dbd3aea1 100644 --- a/archival/Config.src +++ b/archival/Config.src | |||
@@ -5,6 +5,8 @@ | |||
5 | 5 | ||
6 | menu "Archival Utilities" | 6 | menu "Archival Utilities" |
7 | 7 | ||
8 | INSERT | ||
9 | |||
8 | config FEATURE_SEAMLESS_XZ | 10 | config FEATURE_SEAMLESS_XZ |
9 | bool "Make tar, rpm, modprobe etc understand .xz data" | 11 | bool "Make tar, rpm, modprobe etc understand .xz data" |
10 | default y | 12 | default y |
diff --git a/archival/Kbuild.src b/archival/Kbuild.src index 3300ea90f..076e58278 100644 --- a/archival/Kbuild.src +++ b/archival/Kbuild.src | |||
@@ -7,6 +7,9 @@ | |||
7 | libs-y += libunarchive/ | 7 | libs-y += libunarchive/ |
8 | 8 | ||
9 | lib-y:= | 9 | lib-y:= |
10 | |||
11 | INSERT | ||
12 | |||
10 | lib-$(CONFIG_AR) += ar.o | 13 | lib-$(CONFIG_AR) += ar.o |
11 | lib-$(CONFIG_CPIO) += cpio.o | 14 | lib-$(CONFIG_CPIO) += cpio.o |
12 | lib-$(CONFIG_DPKG) += dpkg.o | 15 | lib-$(CONFIG_DPKG) += dpkg.o |
diff --git a/archival/dpkg_deb.c b/archival/dpkg_deb.c index cfbd78420..45a791bba 100644 --- a/archival/dpkg_deb.c +++ b/archival/dpkg_deb.c | |||
@@ -32,14 +32,17 @@ int dpkg_deb_main(int argc, char **argv) | |||
32 | ar_archive->filter = filter_accept_list_reassign; | 32 | ar_archive->filter = filter_accept_list_reassign; |
33 | 33 | ||
34 | #if ENABLE_FEATURE_SEAMLESS_GZ | 34 | #if ENABLE_FEATURE_SEAMLESS_GZ |
35 | llist_add_to(&(ar_archive->accept), (char*)"data.tar.gz"); | 35 | llist_add_to(&ar_archive->accept, (char*)"data.tar.gz"); |
36 | llist_add_to(&control_tar_llist, (char*)"control.tar.gz"); | 36 | llist_add_to(&control_tar_llist, (char*)"control.tar.gz"); |
37 | #endif | 37 | #endif |
38 | |||
39 | #if ENABLE_FEATURE_SEAMLESS_BZ2 | 38 | #if ENABLE_FEATURE_SEAMLESS_BZ2 |
40 | llist_add_to(&(ar_archive->accept), (char*)"data.tar.bz2"); | 39 | llist_add_to(&ar_archive->accept, (char*)"data.tar.bz2"); |
41 | llist_add_to(&control_tar_llist, (char*)"control.tar.bz2"); | 40 | llist_add_to(&control_tar_llist, (char*)"control.tar.bz2"); |
42 | #endif | 41 | #endif |
42 | #if ENABLE_FEATURE_SEAMLESS_LZMA | ||
43 | llist_add_to(&ar_archive->accept, (char*)"data.tar.lzma"); | ||
44 | llist_add_to(&control_tar_llist, (char*)"control.tar.lzma"); | ||
45 | #endif | ||
43 | 46 | ||
44 | opt_complementary = "c--efXx:e--cfXx:f--ceXx:X--cefx:x--cefX"; | 47 | opt_complementary = "c--efXx:e--cfXx:f--ceXx:X--cefx:x--cefX"; |
45 | opt = getopt32(argv, "cefXx"); | 48 | opt = getopt32(argv, "cefXx"); |
diff --git a/archival/libunarchive/Kbuild.src b/archival/libunarchive/Kbuild.src index ed8e85793..81854558b 100644 --- a/archival/libunarchive/Kbuild.src +++ b/archival/libunarchive/Kbuild.src | |||
@@ -33,6 +33,8 @@ DPKG_FILES:= \ | |||
33 | get_header_tar.o \ | 33 | get_header_tar.o \ |
34 | filter_accept_list_reassign.o | 34 | filter_accept_list_reassign.o |
35 | 35 | ||
36 | INSERT | ||
37 | |||
36 | lib-$(CONFIG_AR) += get_header_ar.o unpack_ar_archive.o | 38 | lib-$(CONFIG_AR) += get_header_ar.o unpack_ar_archive.o |
37 | lib-$(CONFIG_BUNZIP2) += decompress_bunzip2.o | 39 | lib-$(CONFIG_BUNZIP2) += decompress_bunzip2.o |
38 | lib-$(CONFIG_UNLZMA) += decompress_unlzma.o | 40 | lib-$(CONFIG_UNLZMA) += decompress_unlzma.o |
diff --git a/archival/libunarchive/data_extract_all.c b/archival/libunarchive/data_extract_all.c index 815261036..c4ffe7ef8 100644 --- a/archival/libunarchive/data_extract_all.c +++ b/archival/libunarchive/data_extract_all.c | |||
@@ -152,35 +152,32 @@ void FAST_FUNC data_extract_all(archive_handle_t *archive_handle) | |||
152 | bb_error_msg_and_die("unrecognized file type"); | 152 | bb_error_msg_and_die("unrecognized file type"); |
153 | } | 153 | } |
154 | 154 | ||
155 | if (!(archive_handle->ah_flags & ARCHIVE_DONT_RESTORE_OWNER)) { | 155 | if (!S_ISLNK(file_header->mode)) { |
156 | #if ENABLE_FEATURE_TAR_UNAME_GNAME | 156 | if (!(archive_handle->ah_flags & ARCHIVE_DONT_RESTORE_OWNER)) { |
157 | if (!(archive_handle->ah_flags & ARCHIVE_NUMERIC_OWNER)) { | ||
158 | uid_t uid = file_header->uid; | 157 | uid_t uid = file_header->uid; |
159 | gid_t gid = file_header->gid; | 158 | gid_t gid = file_header->gid; |
160 | 159 | #if ENABLE_FEATURE_TAR_UNAME_GNAME | |
161 | if (file_header->tar__uname) { | 160 | if (!(archive_handle->ah_flags & ARCHIVE_NUMERIC_OWNER)) { |
161 | if (file_header->tar__uname) { | ||
162 | //TODO: cache last name/id pair? | 162 | //TODO: cache last name/id pair? |
163 | struct passwd *pwd = getpwnam(file_header->tar__uname); | 163 | struct passwd *pwd = getpwnam(file_header->tar__uname); |
164 | if (pwd) uid = pwd->pw_uid; | 164 | if (pwd) uid = pwd->pw_uid; |
165 | } | 165 | } |
166 | if (file_header->tar__gname) { | 166 | if (file_header->tar__gname) { |
167 | struct group *grp = getgrnam(file_header->tar__gname); | 167 | struct group *grp = getgrnam(file_header->tar__gname); |
168 | if (grp) gid = grp->gr_gid; | 168 | if (grp) gid = grp->gr_gid; |
169 | } | ||
169 | } | 170 | } |
171 | #endif | ||
170 | /* GNU tar 1.15.1 uses chown, not lchown */ | 172 | /* GNU tar 1.15.1 uses chown, not lchown */ |
171 | chown(file_header->name, uid, gid); | 173 | chown(file_header->name, uid, gid); |
172 | } else | 174 | } |
173 | #endif | ||
174 | chown(file_header->name, file_header->uid, file_header->gid); | ||
175 | } | ||
176 | if (!S_ISLNK(file_header->mode)) { | ||
177 | /* uclibc has no lchmod, glibc is even stranger - | 175 | /* uclibc has no lchmod, glibc is even stranger - |
178 | * it has lchmod which seems to do nothing! | 176 | * it has lchmod which seems to do nothing! |
179 | * so we use chmod... */ | 177 | * so we use chmod... */ |
180 | if (!(archive_handle->ah_flags & ARCHIVE_DONT_RESTORE_PERM)) { | 178 | if (!(archive_handle->ah_flags & ARCHIVE_DONT_RESTORE_PERM)) { |
181 | chmod(file_header->name, file_header->mode); | 179 | chmod(file_header->name, file_header->mode); |
182 | } | 180 | } |
183 | /* same for utime */ | ||
184 | if (archive_handle->ah_flags & ARCHIVE_RESTORE_DATE) { | 181 | if (archive_handle->ah_flags & ARCHIVE_RESTORE_DATE) { |
185 | struct timeval t[2]; | 182 | struct timeval t[2]; |
186 | 183 | ||