overload the existing '-q' flag so that if '-l' and '-q' are used

together, a "short form" listing (just pathnames) is generated.
change a few flag variables to "smallint" as well.
This commit is contained in:
Paul Fox 2007-09-07 20:28:25 +00:00
parent c8d4d2f11d
commit 9382b3809b
2 changed files with 20 additions and 12 deletions

View File

@ -97,7 +97,10 @@ int unzip_main(int argc, char **argv);
int unzip_main(int argc, char **argv) int unzip_main(int argc, char **argv)
{ {
zip_header_t zip_header; zip_header_t zip_header;
enum {v_silent, v_normal, v_list} verbosity = v_normal; smallint verbose = 1;
smallint listing = 0;
smallint list_header_done = 0;
smallint failed;
enum {o_prompt, o_never, o_always} overwrite = o_prompt; enum {o_prompt, o_never, o_always} overwrite = o_prompt;
unsigned int total_size = 0; unsigned int total_size = 0;
unsigned int total_entries = 0; unsigned int total_entries = 0;
@ -106,7 +109,7 @@ int unzip_main(int argc, char **argv)
llist_t *zaccept = NULL; llist_t *zaccept = NULL;
llist_t *zreject = NULL; llist_t *zreject = NULL;
char *base_dir = NULL; char *base_dir = NULL;
int failed, i, opt, opt_range = 0, list_header_done = 0; int i, opt, opt_range = 0;
char key_buf[512]; char key_buf[512];
struct stat stat_buf; struct stat stat_buf;
@ -115,7 +118,7 @@ int unzip_main(int argc, char **argv)
case 0: /* Options */ case 0: /* Options */
switch (opt) { switch (opt) {
case 'l': /* List */ case 'l': /* List */
verbosity = v_list; listing = 1;
break; break;
case 'n': /* Never overwrite existing files */ case 'n': /* Never overwrite existing files */
@ -130,7 +133,7 @@ int unzip_main(int argc, char **argv)
dst_fd = STDOUT_FILENO; dst_fd = STDOUT_FILENO;
case 'q': /* Be quiet */ case 'q': /* Be quiet */
verbosity = (verbosity == v_normal) ? v_silent : verbosity; verbose = 0;
break; break;
case 1 : /* The zip file */ case 1 : /* The zip file */
@ -205,7 +208,7 @@ int unzip_main(int argc, char **argv)
if (base_dir) if (base_dir)
xchdir(base_dir); xchdir(base_dir);
if (verbosity != v_silent) if (verbose)
printf("Archive: %s\n", src_fn); printf("Archive: %s\n", src_fn);
failed = 0; failed = 0;
@ -245,7 +248,7 @@ int unzip_main(int argc, char **argv)
/* Skip extra header bytes */ /* Skip extra header bytes */
unzip_skip(src_fd, zip_header.formatted.extra_len); unzip_skip(src_fd, zip_header.formatted.extra_len);
if ((verbosity == v_list) && !list_header_done){ if (listing && verbose && !list_header_done){
puts(" Length Date Time Name\n" puts(" Length Date Time Name\n"
" -------- ---- ---- ----"); " -------- ---- ---- ----");
list_header_done = 1; list_header_done = 1;
@ -259,7 +262,8 @@ int unzip_main(int argc, char **argv)
} else { /* Extract entry */ } else { /* Extract entry */
total_size += zip_header.formatted.ucmpsize; total_size += zip_header.formatted.ucmpsize;
if (verbosity == v_list) { /* List entry */ if (listing) { /* List entry */
if (verbose) {
unsigned int dostime = zip_header.formatted.modtime | (zip_header.formatted.moddate << 16); unsigned int dostime = zip_header.formatted.modtime | (zip_header.formatted.moddate << 16);
printf("%9u %02u-%02u-%02u %02u:%02u %s\n", printf("%9u %02u-%02u-%02u %02u:%02u %s\n",
zip_header.formatted.ucmpsize, zip_header.formatted.ucmpsize,
@ -270,6 +274,10 @@ int unzip_main(int argc, char **argv)
(dostime & 0x000007e0) >> 5, (dostime & 0x000007e0) >> 5,
dst_fn); dst_fn);
total_entries++; total_entries++;
} else {
/* short listing -- filenames only */
printf("%s\n", dst_fn);
}
i = 'n'; i = 'n';
} else if (dst_fd == STDOUT_FILENO) { /* Extracting to STDOUT */ } else if (dst_fd == STDOUT_FILENO) { /* Extracting to STDOUT */
i = -1; i = -1;
@ -278,7 +286,7 @@ int unzip_main(int argc, char **argv)
if (errno != ENOENT) { if (errno != ENOENT) {
bb_perror_msg_and_die("cannot stat '%s'",dst_fn); bb_perror_msg_and_die("cannot stat '%s'",dst_fn);
} }
if (verbosity == v_normal) { if (verbose) {
printf(" creating: %s\n", dst_fn); printf(" creating: %s\n", dst_fn);
} }
unzip_create_leading_dirs(dst_fn); unzip_create_leading_dirs(dst_fn);
@ -326,7 +334,7 @@ int unzip_main(int argc, char **argv)
unzip_create_leading_dirs(dst_fn); unzip_create_leading_dirs(dst_fn);
dst_fd = xopen(dst_fn, O_WRONLY | O_CREAT | O_TRUNC); dst_fd = xopen(dst_fn, O_WRONLY | O_CREAT | O_TRUNC);
case -1: /* Unzip */ case -1: /* Unzip */
if (verbosity == v_normal) { if (verbose) {
printf(" inflating: %s\n", dst_fn); printf(" inflating: %s\n", dst_fn);
} }
if (unzip_extract(&zip_header, src_fd, dst_fd)) { if (unzip_extract(&zip_header, src_fd, dst_fd)) {
@ -368,7 +376,7 @@ int unzip_main(int argc, char **argv)
} }
} }
if (verbosity == v_list) { if (listing && verbose) {
printf(" -------- -------\n" printf(" -------- -------\n"
"%9d %d files\n", total_size, total_entries); "%9d %d files\n", total_size, total_entries);
} }

View File

@ -3763,7 +3763,7 @@ USE_FEATURE_RUN_PARTS_FANCY("\n -l Prints names of all matching files even when
#define unzip_full_usage \ #define unzip_full_usage \
"Extract files from ZIP archives" \ "Extract files from ZIP archives" \
"\n\nOptions:\n" \ "\n\nOptions:\n" \
" -l List archive contents (short form)\n" \ " -l List archive contents (with -q for short form)\n" \
" -n Never overwrite existing files (default)\n" \ " -n Never overwrite existing files (default)\n" \
" -o Overwrite files without prompting\n" \ " -o Overwrite files without prompting\n" \
" -p Send output to stdout\n" \ " -p Send output to stdout\n" \