summaryrefslogtreecommitdiff
path: root/usr.bin/uudecode
diff options
context:
space:
mode:
Diffstat (limited to 'usr.bin/uudecode')
-rw-r--r--usr.bin/uudecode/uudecode.c57
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);
}