summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--archival/gzip.c62
1 files changed, 27 insertions, 35 deletions
diff --git a/archival/gzip.c b/archival/gzip.c
index 7c18154..05f6cb5 100644
--- a/archival/gzip.c
+++ b/archival/gzip.c
@@ -1122,44 +1122,36 @@ typedef struct dirent dir_type;
/* ======================================================================== */
int gzip_main(int argc, char **argv)
{
+ enum {
+ OPT_tostdout = 0x1,
+ OPT_force = 0x2,
+ };
+
+ unsigned long opt;
int result;
int inFileNum;
int outFileNum;
struct stat statBuf;
char *delFileName;
- int tostdout = 0;
- int force = 0;
- int opt;
-
- while ((opt = getopt(argc, argv, "cf123456789dq")) != -1) {
- switch (opt) {
- case 'c':
- tostdout = 1;
- break;
- case 'f':
- force = 1;
- break;
- /* Ignore 1-9 (compression level) options */
- case '1':
- case '2':
- case '3':
- case '4':
- case '5':
- case '6':
- case '7':
- case '8':
- case '9':
- break;
- case 'q':
- break;
-#ifdef CONFIG_GUNZIP
- case 'd':
- optind = 1;
- return gunzip_main(argc, argv);
-#endif
- default:
- bb_show_usage();
- }
+
+ opt = bb_getopt_ulflags(argc, argv, "cf123456789q" USE_GUNZIP("d"));
+ //if (opt & 0x1) // -c
+ //if (opt & 0x2) // -f
+ /* Ignore 1-9 (compression level) options */
+ //if (opt & 0x4) // -1
+ //if (opt & 0x8) // -2
+ //if (opt & 0x10) // -3
+ //if (opt & 0x20) // -4
+ //if (opt & 0x40) // -5
+ //if (opt & 0x80) // -6
+ //if (opt & 0x100) // -7
+ //if (opt & 0x200) // -8
+ //if (opt & 0x400) // -9
+ //if (opt & 0x800) // -q
+ if (ENABLE_GUNZIP && (opt & 0x1000)) { // -d
+ /* FIXME: bb_getopt_ulflags should not depend on optind */
+ optind = 1;
+ return gunzip_main(argc, argv);
}
foreground = signal(SIGINT, SIG_IGN) != SIG_IGN;
@@ -1211,7 +1203,7 @@ int gzip_main(int argc, char **argv)
bb_perror_msg_and_die("%s", argv[i]);
time_stamp = statBuf.st_ctime;
- if (!tostdout) {
+ if (!(opt & OPT_tostdout)) {
path = xasprintf("%s.gz", argv[i]);
/* Open output file */
@@ -1233,7 +1225,7 @@ int gzip_main(int argc, char **argv)
outFileNum = STDOUT_FILENO;
}
- if (path == NULL && isatty(outFileNum) && force == 0) {
+ if (path == NULL && isatty(outFileNum) && !(opt & OPT_force)) {
bb_error_msg
("compressed data not written to a terminal. Use -f to force compression.");
free(path);