zcat: complain if input is not compressed
function old new delta buffer_fill_and_print 178 191 +13 varvalue 735 743 +8 bbunpack 747 755 +8 open_zipped 85 89 +4 xmalloc_open_zipped_read_close 61 63 +2 get_addr_1 240 242 +2 fbsplash_main 1228 1230 +2 pstree_main 322 321 -1 builtin_type 121 119 -2 do_load 954 926 -28 ------------------------------------------------------------------------------ (add/remove: 0/0 grow/shrink: 7/3 up/down: 39/-31) Total: 8 bytes Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
This commit is contained in:
parent
f1999b5a9d
commit
640ce3de07
@ -72,7 +72,8 @@ int FAST_FUNC bbunpack(char **argv,
|
|||||||
goto err;
|
goto err;
|
||||||
} else {
|
} else {
|
||||||
/* "clever zcat" with FILE */
|
/* "clever zcat" with FILE */
|
||||||
int fd = open_zipped(filename);
|
/* fail_if_not_compressed because zcat refuses uncompressed input */
|
||||||
|
int fd = open_zipped(filename, /*fail_if_not_compressed:*/ 1);
|
||||||
if (fd < 0)
|
if (fd < 0)
|
||||||
goto err_name;
|
goto err_name;
|
||||||
xmove_fd(fd, STDIN_FILENO);
|
xmove_fd(fd, STDIN_FILENO);
|
||||||
@ -80,7 +81,7 @@ int FAST_FUNC bbunpack(char **argv,
|
|||||||
} else
|
} else
|
||||||
if (option_mask32 & SEAMLESS_MAGIC) {
|
if (option_mask32 & SEAMLESS_MAGIC) {
|
||||||
/* "clever zcat" on stdin */
|
/* "clever zcat" on stdin */
|
||||||
if (setup_unzip_on_fd(STDIN_FILENO, /*fail_if_not_detected*/ 0))
|
if (setup_unzip_on_fd(STDIN_FILENO, /*fail_if_not_compressed*/ 1))
|
||||||
goto err;
|
goto err;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -243,7 +243,7 @@ char FAST_FUNC get_header_tar(archive_handle_t *archive_handle)
|
|||||||
* or not first block (false positive, it's not .gz/.bz2!) */
|
* or not first block (false positive, it's not .gz/.bz2!) */
|
||||||
if (lseek(archive_handle->src_fd, -i, SEEK_CUR) != 0)
|
if (lseek(archive_handle->src_fd, -i, SEEK_CUR) != 0)
|
||||||
goto err;
|
goto err;
|
||||||
if (setup_unzip_on_fd(archive_handle->src_fd, /*fail_if_not_detected:*/ 0) != 0)
|
if (setup_unzip_on_fd(archive_handle->src_fd, /*fail_if_not_compressed:*/ 0) != 0)
|
||||||
err:
|
err:
|
||||||
bb_error_msg_and_die("invalid tar magic");
|
bb_error_msg_and_die("invalid tar magic");
|
||||||
archive_handle->offset = 0;
|
archive_handle->offset = 0;
|
||||||
|
@ -118,7 +118,7 @@ void FAST_FUNC open_transformer(int fd, const char *transform_prog)
|
|||||||
/* Used by e.g. rpm which gives us a fd without filename,
|
/* Used by e.g. rpm which gives us a fd without filename,
|
||||||
* thus we can't guess the format from filename's extension.
|
* thus we can't guess the format from filename's extension.
|
||||||
*/
|
*/
|
||||||
int FAST_FUNC setup_unzip_on_fd(int fd, int fail_if_not_detected)
|
int FAST_FUNC setup_unzip_on_fd(int fd, int fail_if_not_compressed)
|
||||||
{
|
{
|
||||||
union {
|
union {
|
||||||
uint8_t b[4];
|
uint8_t b[4];
|
||||||
@ -159,7 +159,7 @@ int FAST_FUNC setup_unzip_on_fd(int fd, int fail_if_not_detected)
|
|||||||
}
|
}
|
||||||
|
|
||||||
/* No known magic seen */
|
/* No known magic seen */
|
||||||
if (fail_if_not_detected)
|
if (fail_if_not_compressed)
|
||||||
bb_error_msg_and_die("no gzip"
|
bb_error_msg_and_die("no gzip"
|
||||||
IF_FEATURE_SEAMLESS_BZ2("/bzip2")
|
IF_FEATURE_SEAMLESS_BZ2("/bzip2")
|
||||||
IF_FEATURE_SEAMLESS_XZ("/xz")
|
IF_FEATURE_SEAMLESS_XZ("/xz")
|
||||||
@ -180,7 +180,7 @@ int FAST_FUNC setup_unzip_on_fd(int fd, int fail_if_not_detected)
|
|||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
int FAST_FUNC open_zipped(const char *fname)
|
int FAST_FUNC open_zipped(const char *fname, int fail_if_not_compressed)
|
||||||
{
|
{
|
||||||
int fd;
|
int fd;
|
||||||
|
|
||||||
@ -200,16 +200,7 @@ int FAST_FUNC open_zipped(const char *fname)
|
|||||||
|| (ENABLE_FEATURE_SEAMLESS_BZ2)
|
|| (ENABLE_FEATURE_SEAMLESS_BZ2)
|
||||||
|| (ENABLE_FEATURE_SEAMLESS_XZ)
|
|| (ENABLE_FEATURE_SEAMLESS_XZ)
|
||||||
) {
|
) {
|
||||||
/*
|
setup_unzip_on_fd(fd, fail_if_not_compressed);
|
||||||
* Do we want to fail_if_not_detected?
|
|
||||||
* In most cases, no: think "insmod non_compressed_module".
|
|
||||||
* A case which would like to fail is "zcat uncompressed_file":
|
|
||||||
* otherwise, it happily outputs uncompressed_file as-is,
|
|
||||||
* which is, strictly speaking, not what is expected.
|
|
||||||
* If this ever becomes a problem, we can add
|
|
||||||
* fail_if_not_detected bool argument to open_zipped().
|
|
||||||
*/
|
|
||||||
setup_unzip_on_fd(fd, /*fail_if_not_detected:*/ 0);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
return fd;
|
return fd;
|
||||||
@ -222,7 +213,7 @@ void* FAST_FUNC xmalloc_open_zipped_read_close(const char *fname, size_t *maxsz_
|
|||||||
int fd;
|
int fd;
|
||||||
char *image;
|
char *image;
|
||||||
|
|
||||||
fd = open_zipped(fname);
|
fd = open_zipped(fname, /*fail_if_not_compressed:*/ 0);
|
||||||
if (fd < 0)
|
if (fd < 0)
|
||||||
return NULL;
|
return NULL;
|
||||||
|
|
||||||
|
@ -122,7 +122,7 @@ static void extract_cpio(int fd, const char *source_rpm)
|
|||||||
archive_handle->src_fd = fd;
|
archive_handle->src_fd = fd;
|
||||||
/*archive_handle->offset = 0; - init_handle() did it */
|
/*archive_handle->offset = 0; - init_handle() did it */
|
||||||
|
|
||||||
setup_unzip_on_fd(archive_handle->src_fd, /*fail_if_not_detected:*/ 1);
|
setup_unzip_on_fd(archive_handle->src_fd, /*fail_if_not_compressed:*/ 1);
|
||||||
while (get_header_cpio(archive_handle) == EXIT_SUCCESS)
|
while (get_header_cpio(archive_handle) == EXIT_SUCCESS)
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
@ -80,7 +80,7 @@ int rpm2cpio_main(int argc UNUSED_PARAM, char **argv)
|
|||||||
// signal(SIGCHLD, check_errors_in_children);
|
// signal(SIGCHLD, check_errors_in_children);
|
||||||
|
|
||||||
/* This works, but doesn't report uncompress errors (they happen in child) */
|
/* This works, but doesn't report uncompress errors (they happen in child) */
|
||||||
setup_unzip_on_fd(rpm_fd, /*fail_if_not_detected:*/ 1);
|
setup_unzip_on_fd(rpm_fd, /*fail_if_not_compressed:*/ 1);
|
||||||
if (bb_copyfd_eof(rpm_fd, STDOUT_FILENO) < 0)
|
if (bb_copyfd_eof(rpm_fd, STDOUT_FILENO) < 0)
|
||||||
bb_error_msg_and_die("error unpacking");
|
bb_error_msg_and_die("error unpacking");
|
||||||
|
|
||||||
|
@ -1137,7 +1137,7 @@ int tar_main(int argc UNUSED_PARAM, char **argv)
|
|||||||
&& flags == O_RDONLY
|
&& flags == O_RDONLY
|
||||||
&& !(opt & OPT_ANY_COMPRESS)
|
&& !(opt & OPT_ANY_COMPRESS)
|
||||||
) {
|
) {
|
||||||
tar_handle->src_fd = open_zipped(tar_filename);
|
tar_handle->src_fd = open_zipped(tar_filename, /*fail_if_not_compressed:*/ 0);
|
||||||
if (tar_handle->src_fd < 0)
|
if (tar_handle->src_fd < 0)
|
||||||
bb_perror_msg_and_die("can't open '%s'", tar_filename);
|
bb_perror_msg_and_die("can't open '%s'", tar_filename);
|
||||||
} else {
|
} else {
|
||||||
|
@ -736,12 +736,12 @@ extern void *xmalloc_xopen_read_close(const char *filename, size_t *maxsz_p) FAS
|
|||||||
|
|
||||||
#if SEAMLESS_COMPRESSION
|
#if SEAMLESS_COMPRESSION
|
||||||
/* Autodetects gzip/bzip2 formats. fd may be in the middle of the file! */
|
/* Autodetects gzip/bzip2 formats. fd may be in the middle of the file! */
|
||||||
extern int setup_unzip_on_fd(int fd, int fail_if_not_detected) FAST_FUNC;
|
extern int setup_unzip_on_fd(int fd, int fail_if_not_compressed) FAST_FUNC;
|
||||||
/* Autodetects .gz etc */
|
/* Autodetects .gz etc */
|
||||||
extern int open_zipped(const char *fname) FAST_FUNC;
|
extern int open_zipped(const char *fname, int fail_if_not_compressed) FAST_FUNC;
|
||||||
#else
|
#else
|
||||||
# define setup_unzip_on_fd(...) (0)
|
# define setup_unzip_on_fd(...) (0)
|
||||||
# define open_zipped(fname) open((fname), O_RDONLY);
|
# define open_zipped(fname, fail_if_not_compressed) open((fname), O_RDONLY);
|
||||||
#endif
|
#endif
|
||||||
extern void *xmalloc_open_zipped_read_close(const char *fname, size_t *maxsz_p) FAST_FUNC RETURNS_MALLOC;
|
extern void *xmalloc_open_zipped_read_close(const char *fname, size_t *maxsz_p) FAST_FUNC RETURNS_MALLOC;
|
||||||
|
|
||||||
|
@ -353,7 +353,7 @@ static void fb_drawimage(void)
|
|||||||
if (LONE_DASH(G.image_filename)) {
|
if (LONE_DASH(G.image_filename)) {
|
||||||
theme_file = stdin;
|
theme_file = stdin;
|
||||||
} else {
|
} else {
|
||||||
int fd = open_zipped(G.image_filename);
|
int fd = open_zipped(G.image_filename, /*fail_if_not_compressed:*/ 0);
|
||||||
if (fd < 0)
|
if (fd < 0)
|
||||||
bb_simple_perror_msg_and_die(G.image_filename);
|
bb_simple_perror_msg_and_die(G.image_filename);
|
||||||
theme_file = xfdopen_for_read(fd);
|
theme_file = xfdopen_for_read(fd);
|
||||||
|
@ -102,7 +102,7 @@ static int run_pipe(const char *pager, char *man_filename, int man, int level)
|
|||||||
|
|
||||||
ordinary_manpage:
|
ordinary_manpage:
|
||||||
close(STDIN_FILENO);
|
close(STDIN_FILENO);
|
||||||
open_zipped(man_filename); /* guaranteed to use fd 0 (STDIN_FILENO) */
|
open_zipped(man_filename, /*fail_if_not_compressed:*/ 0); /* guaranteed to use fd 0 (STDIN_FILENO) */
|
||||||
/* "2>&1" is added so that nroff errors are shown in pager too.
|
/* "2>&1" is added so that nroff errors are shown in pager too.
|
||||||
* Otherwise it may show just empty screen */
|
* Otherwise it may show just empty screen */
|
||||||
cmd = xasprintf(
|
cmd = xasprintf(
|
||||||
|
Loading…
Reference in New Issue
Block a user