Move seamless .Z support into unpack_gz_stream
unpack_gz_stream 566 643 +77 unpack_gunzip 123 12 -111 Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
This commit is contained in:
parent
8a6a2f9c9c
commit
02c3c38420
@ -32,10 +32,10 @@ config FEATURE_SEAMLESS_GZ
|
|||||||
Make tar, rpm, modprobe etc understand .gz data.
|
Make tar, rpm, modprobe etc understand .gz data.
|
||||||
|
|
||||||
config FEATURE_SEAMLESS_Z
|
config FEATURE_SEAMLESS_Z
|
||||||
bool "Make tar and gunzip understand .Z data"
|
bool "tar, rpm, modprobe etc understand .Z data"
|
||||||
default n
|
default n
|
||||||
help
|
help
|
||||||
Make tar and gunzip understand .Z data.
|
Make tar, rpm, modprobe etc understand .Z data.
|
||||||
|
|
||||||
config AR
|
config AR
|
||||||
bool "ar"
|
bool "ar"
|
||||||
|
@ -274,29 +274,7 @@ char* FAST_FUNC make_new_name_gunzip(char *filename, const char *expected_ext UN
|
|||||||
static
|
static
|
||||||
IF_DESKTOP(long long) int FAST_FUNC unpack_gunzip(transformer_aux_data_t *aux)
|
IF_DESKTOP(long long) int FAST_FUNC unpack_gunzip(transformer_aux_data_t *aux)
|
||||||
{
|
{
|
||||||
IF_DESKTOP(long long) int status = -1;
|
return unpack_gz_stream(aux, STDIN_FILENO, STDOUT_FILENO);
|
||||||
uint16_t magic2;
|
|
||||||
|
|
||||||
//TODO: fold below into unpack_gz_stream? Then the whole level of indirection
|
|
||||||
// unpack_FOO() -> unpack_FOO_stream can be collapsed in this module!
|
|
||||||
|
|
||||||
aux->check_signature = 0; /* we will check it here, not in unpack_*_stream */
|
|
||||||
|
|
||||||
if (full_read(STDIN_FILENO, &magic2, 2) != 2)
|
|
||||||
goto bad_magic;
|
|
||||||
if (ENABLE_FEATURE_SEAMLESS_Z && magic2 == COMPRESS_MAGIC) {
|
|
||||||
status = unpack_Z_stream(aux, STDIN_FILENO, STDOUT_FILENO);
|
|
||||||
} else if (magic2 == GZIP_MAGIC) {
|
|
||||||
status = unpack_gz_stream(aux, STDIN_FILENO, STDOUT_FILENO);
|
|
||||||
} else {
|
|
||||||
bad_magic:
|
|
||||||
bb_error_msg("invalid magic");
|
|
||||||
/* status is still == -1 */
|
|
||||||
}
|
|
||||||
if (status < 0) {
|
|
||||||
bb_error_msg("error inflating");
|
|
||||||
}
|
|
||||||
return status;
|
|
||||||
}
|
}
|
||||||
/*
|
/*
|
||||||
* Linux kernel build uses gzip -d -n. We accept and ignore it.
|
* Linux kernel build uses gzip -d -n. We accept and ignore it.
|
||||||
|
@ -1188,8 +1188,26 @@ unpack_gz_stream(transformer_aux_data_t *aux, int src_fd, int dst_fd)
|
|||||||
IF_DESKTOP(long long) int total, n;
|
IF_DESKTOP(long long) int total, n;
|
||||||
DECLARE_STATE;
|
DECLARE_STATE;
|
||||||
|
|
||||||
|
#if !ENABLE_FEATURE_SEAMLESS_Z
|
||||||
if (check_signature16(aux, src_fd, GZIP_MAGIC))
|
if (check_signature16(aux, src_fd, GZIP_MAGIC))
|
||||||
return -1;
|
return -1;
|
||||||
|
#else
|
||||||
|
if (aux && aux->check_signature) {
|
||||||
|
uint16_t magic2;
|
||||||
|
|
||||||
|
if (full_read(STDIN_FILENO, &magic2, 2) != 2) {
|
||||||
|
bad_magic:
|
||||||
|
bb_error_msg("invalid magic");
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
if (magic2 == COMPRESS_MAGIC) {
|
||||||
|
aux->check_signature = 0;
|
||||||
|
return unpack_Z_stream(aux, src_fd, dst_fd);
|
||||||
|
}
|
||||||
|
if (magic2 != GZIP_MAGIC)
|
||||||
|
goto bad_magic;
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
total = 0;
|
total = 0;
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user