diff options
author | Igor Sobrado <sobrado@cvs.openbsd.org> | 2008-07-05 20:59:43 +0000 |
---|---|---|
committer | Igor Sobrado <sobrado@cvs.openbsd.org> | 2008-07-05 20:59:43 +0000 |
commit | b6b1220e381f37313983becedd054f288b95ba47 (patch) | |
tree | f48b3593160d67cd530f93e32b3ce915b7f7d5fa /usr.bin/uudecode | |
parent | 44763bd82d4330d4f0221de9ea65e0aee7e2ff8e (diff) |
each utility must have its own usage and its own set of options;
b64encode and b64decode are equivalent to running uuencode and uudecode
respectively with the -m flag specified, so this flag should not be
available in these utilities; while here, fix synopsis.
based on millert's diff for compress/gzip.
ok millert@
Diffstat (limited to 'usr.bin/uudecode')
-rw-r--r-- | usr.bin/uudecode/uudecode.c | 57 |
1 files changed, 39 insertions, 18 deletions
diff --git a/usr.bin/uudecode/uudecode.c b/usr.bin/uudecode/uudecode.c index 11b26076ca0..cbe70add09c 100644 --- a/usr.bin/uudecode/uudecode.c +++ b/usr.bin/uudecode/uudecode.c @@ -1,4 +1,4 @@ -/* $OpenBSD: uudecode.c,v 1.14 2004/04/09 22:54:02 millert Exp $ */ +/* $OpenBSD: uudecode.c,v 1.15 2008/07/05 20:59:42 sobrado Exp $ */ /* $FreeBSD: uudecode.c,v 1.49 2003/05/03 19:44:46 obrien Exp $ */ /*- @@ -40,7 +40,7 @@ static const char copyright[] = #if 0 static const char sccsid[] = "@(#)uudecode.c 8.2 (Berkeley) 4/2/94"; #endif -static const char rcsid[] = "$OpenBSD: uudecode.c,v 1.14 2004/04/09 22:54:02 millert Exp $"; +static const char rcsid[] = "$OpenBSD: uudecode.c,v 1.15 2008/07/05 20:59:42 sobrado Exp $"; #endif /* not lint */ /* @@ -69,27 +69,41 @@ static const char *infile, *outfile; static FILE *infp, *outfp; static int base64, cflag, iflag, oflag, pflag, rflag, sflag; -static void usage(void); +static void usage(int); static int decode(void); static int decode2(void); static int uu_decode(void); static int base64_decode(void); +/* + * program modes + */ +#define MODE_DECODE 0 +#define MODE_B64DECODE 1 + int main(int argc, char *argv[]) { - int rval, ch; + int rval, ch, mode; extern char *__progname; + static const char *optstr[2] = { + "cimo:prs", + "cio:prs" + }; - if (strcmp(__progname, "b64decode") == 0) + mode = 0; + + if (strcmp(__progname, "b64decode") == 0) { base64 = 1; + mode = MODE_B64DECODE; + } setlocale(LC_ALL, ""); - while ((ch = getopt(argc, argv, "cimo:prs")) != -1) { + while ((ch = getopt(argc, argv, optstr[mode])) != -1) { switch(ch) { case 'c': if (oflag || rflag) - usage(); + usage(mode); cflag = 1; /* multiple uudecode'd files */ break; case 'i': @@ -100,28 +114,28 @@ main(int argc, char *argv[]) break; case 'o': if (cflag || pflag || rflag || sflag) - usage(); + usage(mode); oflag = 1; /* output to the specified file */ sflag = 1; /* do not strip pathnames for output */ outfile = optarg; /* set the output filename */ break; case 'p': if (oflag) - usage(); + usage(mode); pflag = 1; /* print output to stdout */ break; case 'r': if (cflag || oflag) - usage(); + usage(mode); rflag = 1; /* decode raw data */ break; case 's': if (oflag) - usage(); + usage(mode); sflag = 1; /* do not strip pathnames for output */ break; default: - usage(); + usage(mode); } } argc -= optind; @@ -436,12 +450,19 @@ base64_decode(void) } static void -usage(void) +usage(int mode) { - (void)fprintf(stderr, - "usage: uudecode [-cimprs] [file ...]\n" - " uudecode [-i] -o output_file [file]\n" - " b64decode [-cimprs] [file ...]\n" - " b64decode [-i] -o output_file [file]\n"); + switch (mode) { + case MODE_DECODE: + (void)fprintf(stderr, + "usage: uudecode [-cimprs] [file ...]\n" + " uudecode [-i] -o output_file [file]\n"); + break; + case MODE_B64DECODE: + (void)fprintf(stderr, + "usage: b64decode [-ciprs] [file ...]\n" + " b64decode [-i] -o output_file [file]\n"); + break; + } exit(1); } |