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:
@ -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);
|
||||||
|
@ -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:
|
||||||
|
Reference in New Issue
Block a user