=================================================================== RCS file: /cvsrepo/anoncvs/cvs/src/usr.bin/compress/main.c,v retrieving revision 1.71 retrieving revision 1.72 diff -u -r1.71 -r1.72 --- src/usr.bin/compress/main.c 2008/02/25 16:53:55 1.71 +++ src/usr.bin/compress/main.c 2008/07/05 21:00:38 1.72 @@ -1,4 +1,4 @@ -/* $OpenBSD: main.c,v 1.71 2008/02/25 16:53:55 millert Exp $ */ +/* $OpenBSD: main.c,v 1.72 2008/07/05 21:00:38 sobrado Exp $ */ #ifndef SMALL static const char copyright[] = @@ -36,7 +36,7 @@ #endif /* SMALL */ #ifndef SMALL -static const char main_rcsid[] = "$OpenBSD: main.c,v 1.71 2008/02/25 16:53:55 millert Exp $"; +static const char main_rcsid[] = "$OpenBSD: main.c,v 1.72 2008/07/05 21:00:38 sobrado Exp $"; #endif #include @@ -93,7 +93,7 @@ #endif /* SMALL */ int permission(const char *); -__dead void usage(int); +__dead void usage(int, int); int docompress(const char *, char *, const struct compressor *, int, struct stat *); int dodecompress(const char *, char *, const struct compressor *, @@ -104,7 +104,6 @@ void list_stats(const char *, const struct compressor *, struct z_info *); void verbose_info(const char *, off_t, off_t, u_int32_t); -#define OPTSTRING "123456789ab:cdfghlLnNOo:qrS:tvV" const struct option longopts[] = { #ifndef SMALL { "ascii", no_argument, 0, 'a' }, @@ -140,9 +139,14 @@ char *p, *infile; char outfile[MAXPATHLEN], _infile[MAXPATHLEN], suffix[16]; char *nargv[512]; /* some estimate based on ARG_MAX */ - int bits, ch, error, i, rc, cflag, oflag; + int bits, ch, error, i, rc, cflag, oflag, mode; + static const char *optstr[3] = { + "123456789ab:cdfghlLnNOo:qrS:tvV", + "cfhlNno:qrtv", + "fghqr" + }; - bits = cflag = oflag = 0; + bits = cflag = oflag = mode = 0; storename = -1; p = __progname; if (p[0] == 'g') { @@ -160,10 +164,12 @@ if (!strcmp(p, "zcat")) { decomp++; cflag = 1; + mode = MODE_CAT; } else { if (p[0] == 'u' && p[1] == 'n') { p += 2; decomp++; + mode = MODE_DECOMP; } if (strcmp(p, "zip") && @@ -190,7 +196,7 @@ argv = nargv; } - while ((ch = getopt_long(argc, argv, OPTSTRING, longopts, NULL)) != -1) + while ((ch = getopt_long(argc, argv, optstr[mode], longopts, NULL)) != -1) switch(ch) { case '1': case '2': @@ -289,10 +295,10 @@ break; case 'h': - usage(0); + usage(0, mode); break; default: - usage(1); + usage(1, mode); } argc -= optind; argv += optind; @@ -887,11 +893,22 @@ } __dead void -usage(int status) +usage(int status, int mode) { - fprintf(stderr, - "usage: %s [-123456789cdfghLlNnOqrtVv] [-b bits] [-o filename]\n" - "\t[-S suffix] [file ...]\n", - __progname); + switch (mode) { + case MODE_COMP: + fprintf(stderr, "usage: %s [-123456789cdfghLlNnOqrtVv] " + "[-b bits] [-o filename] [-S suffix]\n" + " %*s [file ...]\n", + __progname, (int)strlen(__progname), ""); + break; + case MODE_DECOMP: + fprintf(stderr, "usage: %s [-cfhlNnqrtv] [-o filename] " + "[file ...]\n", __progname); + break; + case MODE_CAT: + fprintf(stderr, "usage: %s [-fghqr] [file ...]\n", __progname); + break; + } exit(status); }