bzip2 decompression: simple code shrink

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

Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
This commit is contained in:
Denys Vlasenko
2010-06-30 19:43:44 +02:00
parent fa5ea17b5f
commit 620e863ba2
2 changed files with 9 additions and 6 deletions

View File

@ -692,9 +692,9 @@ unpack_bz2_stream(int src_fd, int dst_fd)
IF_DESKTOP(long long) int FAST_FUNC IF_DESKTOP(long long) int FAST_FUNC
unpack_bz2_stream_prime(int src_fd, int dst_fd) unpack_bz2_stream_prime(int src_fd, int dst_fd)
{ {
unsigned char magic[2]; uint16_t magic2;
xread(src_fd, magic, 2); xread(src_fd, &magic2, 2);
if (magic[0] != 'B' || magic[1] != 'Z') { if (magic2 != BZIP2_MAGIC) {
bb_error_msg_and_die("invalid magic"); bb_error_msg_and_die("invalid magic");
} }
return unpack_bz2_stream(src_fd, dst_fd); return unpack_bz2_stream(src_fd, dst_fd);

View File

@ -196,27 +196,30 @@ char FAST_FUNC get_header_tar(archive_handle_t *archive_handle)
) { ) {
#if ENABLE_FEATURE_TAR_AUTODETECT #if ENABLE_FEATURE_TAR_AUTODETECT
char FAST_FUNC (*get_header_ptr)(archive_handle_t *); char FAST_FUNC (*get_header_ptr)(archive_handle_t *);
uint16_t magic2;
autodetect: autodetect:
magic2 = *(uint16_t*)tar.name;
/* tar gz/bz autodetect: check for gz/bz2 magic. /* tar gz/bz autodetect: check for gz/bz2 magic.
* If we see the magic, and it is the very first block, * If we see the magic, and it is the very first block,
* we can switch to get_header_tar_gz/bz2/lzma(). * we can switch to get_header_tar_gz/bz2/lzma().
* Needs seekable fd. I wish recv(MSG_PEEK) works * Needs seekable fd. I wish recv(MSG_PEEK) works
* on any fd... */ * on any fd... */
# if ENABLE_FEATURE_SEAMLESS_GZ # 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; get_header_ptr = get_header_tar_gz;
} else } else
# endif # endif
# if ENABLE_FEATURE_SEAMLESS_BZ2 # 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]) && tar.name[2] == 'h' && isdigit(tar.name[3])
) { /* bzip2 */ ) { /* bzip2 */
get_header_ptr = get_header_tar_bz2; get_header_ptr = get_header_tar_bz2;
} else } else
# endif # endif
# if ENABLE_FEATURE_SEAMLESS_XZ # if ENABLE_FEATURE_SEAMLESS_XZ
//TODO //TODO: if (magic2 == XZ_MAGIC1)...
//else
# endif # endif
goto err; goto err;
/* Two different causes for lseek() != 0: /* Two different causes for lseek() != 0: