[git commit master 1/1] bzip2 decompression: simple code shrink

Denys Vlasenko vda.linux at googlemail.com
Wed Jun 30 17:43:44 UTC 2010


commit: http://git.busybox.net/busybox/commit/?id=620e863ba24fe9e0126d1540e89a531264021a77
branch: http://git.busybox.net/busybox/commit/?id=refs/heads/master

function                                             old     new   delta
unpack_bz2_stream_prime                               60      55      -5
get_header_tar                                      1508    1496     -12

Signed-off-by: Denys Vlasenko <vda.linux at googlemail.com>
---
 archival/libunarchive/decompress_bunzip2.c |    6 +++---
 archival/libunarchive/get_header_tar.c     |    9 ++++++---
 2 files changed, 9 insertions(+), 6 deletions(-)

diff --git a/archival/libunarchive/decompress_bunzip2.c b/archival/libunarchive/decompress_bunzip2.c
index cd8df08..bdbd39a 100644
--- a/archival/libunarchive/decompress_bunzip2.c
+++ b/archival/libunarchive/decompress_bunzip2.c
@@ -692,9 +692,9 @@ unpack_bz2_stream(int src_fd, int dst_fd)
 IF_DESKTOP(long long) int FAST_FUNC
 unpack_bz2_stream_prime(int src_fd, int dst_fd)
 {
-	unsigned char magic[2];
-	xread(src_fd, magic, 2);
-	if (magic[0] != 'B' || magic[1] != 'Z') {
+	uint16_t magic2;
+	xread(src_fd, &magic2, 2);
+	if (magic2 != BZIP2_MAGIC) {
 		bb_error_msg_and_die("invalid magic");
 	}
 	return unpack_bz2_stream(src_fd, dst_fd);
diff --git a/archival/libunarchive/get_header_tar.c b/archival/libunarchive/get_header_tar.c
index 21bbc97..d5c9235 100644
--- a/archival/libunarchive/get_header_tar.c
+++ b/archival/libunarchive/get_header_tar.c
@@ -196,27 +196,30 @@ char FAST_FUNC get_header_tar(archive_handle_t *archive_handle)
 	) {
 #if ENABLE_FEATURE_TAR_AUTODETECT
 		char FAST_FUNC (*get_header_ptr)(archive_handle_t *);
+		uint16_t magic2;
 
  autodetect:
+		magic2 = *(uint16_t*)tar.name;
 		/* tar gz/bz autodetect: check for gz/bz2 magic.
 		 * If we see the magic, and it is the very first block,
 		 * we can switch to get_header_tar_gz/bz2/lzma().
 		 * Needs seekable fd. I wish recv(MSG_PEEK) works
 		 * on any fd... */
 # if ENABLE_FEATURE_SEAMLESS_GZ
-		if (tar.name[0] == 0x1f && tar.name[1] == (char)0x8b) { /* gzip */
+		if (magic2 == GZIP_MAGIC) {
 			get_header_ptr = get_header_tar_gz;
 		} else
 # endif
 # if ENABLE_FEATURE_SEAMLESS_BZ2
-		if (tar.name[0] == 'B' && tar.name[1] == 'Z'
+		if (magic2 == BZIP2_MAGIC
 		 && tar.name[2] == 'h' && isdigit(tar.name[3])
 		) { /* bzip2 */
 			get_header_ptr = get_header_tar_bz2;
 		} else
 # endif
 # if ENABLE_FEATURE_SEAMLESS_XZ
-		//TODO
+		//TODO: if (magic2 == XZ_MAGIC1)...
+		//else
 # endif
 			goto err;
 		/* Two different causes for lseek() != 0:
-- 
1.7.1



More information about the busybox-cvs mailing list