diff options
author | kaloz <kaloz@3c298f89-4303-0410-b956-a3cf2f4a3e73> | 2008-08-20 14:00:34 +0000 |
---|---|---|
committer | kaloz <kaloz@3c298f89-4303-0410-b956-a3cf2f4a3e73> | 2008-08-20 14:00:34 +0000 |
commit | ac2d02c3e08c4c3d62859bffb4dd3bb891b3d5c6 (patch) | |
tree | e2bbc127a4a059392f3c5bea27e2944e0c149ecb /package/busybox/patches/902-tar.patch | |
parent | e90b272ea7df4d2c356ad1331cd9529e06331448 (diff) |
upgrade busybox to v1.11.1 and add current upstream fixes
git-svn-id: svn://svn.openwrt.org/openwrt/trunk@12348 3c298f89-4303-0410-b956-a3cf2f4a3e73
Diffstat (limited to 'package/busybox/patches/902-tar.patch')
-rw-r--r-- | package/busybox/patches/902-tar.patch | 55 |
1 files changed, 55 insertions, 0 deletions
diff --git a/package/busybox/patches/902-tar.patch b/package/busybox/patches/902-tar.patch new file mode 100644 index 0000000000..d9bf7cd0c6 --- /dev/null +++ b/package/busybox/patches/902-tar.patch @@ -0,0 +1,55 @@ +--- a/archival/libunarchive/get_header_tar.c ++++ b/archival/libunarchive/get_header_tar.c +@@ -261,26 +261,33 @@ + case '0': + #if ENABLE_FEATURE_TAR_OLDGNU_COMPATIBILITY + if (last_char_is(file_header->name, '/')) { +- file_header->mode |= S_IFDIR; +- } else ++ goto set_dir; ++ } + #endif + file_header->mode |= S_IFREG; + break; + case '2': + file_header->mode |= S_IFLNK; ++ /* have seen tarballs with size field containing ++ * the size of the link target's name */ ++ size0: ++ file_header->size = 0; + break; + case '3': + file_header->mode |= S_IFCHR; +- break; ++ goto size0; /* paranoia */ + case '4': + file_header->mode |= S_IFBLK; +- break; ++ goto size0; + case '5': ++#if ENABLE_FEATURE_TAR_OLDGNU_COMPATIBILITY ++ set_dir: ++#endif + file_header->mode |= S_IFDIR; +- break; ++ goto size0; + case '6': + file_header->mode |= S_IFIFO; +- break; ++ goto size0; + #if ENABLE_FEATURE_TAR_GNU_EXTENSIONS + case 'L': + /* free: paranoia: tar with several consecutive longnames */ +--- a/archival/libunarchive/seek_by_jump.c ++++ b/archival/libunarchive/seek_by_jump.c +@@ -8,7 +8,9 @@ + + void seek_by_jump(const archive_handle_t *archive_handle, unsigned amount) + { +- if (lseek(archive_handle->src_fd, (off_t) amount, SEEK_CUR) == (off_t) -1) { ++ if (amount ++ && lseek(archive_handle->src_fd, (off_t) amount, SEEK_CUR) == (off_t) -1 ++ ) { + if (errno == ESPIPE) + seek_by_read(archive_handle, amount); + else |