diff options
author | mike <mike@FreeBSD.org> | 2002-01-27 18:21:23 +0000 |
---|---|---|
committer | mike <mike@FreeBSD.org> | 2002-01-27 18:21:23 +0000 |
commit | 7e26e18582964ec5bb216ce4d68c1ce441d375d8 (patch) | |
tree | 6ae7c1c1eee23b4c5f19270e93685c55f5766902 /usr.bin | |
parent | 9fdf88975bc0d2bd305b2bf4f93639a9e2dd2f3b (diff) | |
download | FreeBSD-src-7e26e18582964ec5bb216ce4d68c1ce441d375d8.zip FreeBSD-src-7e26e18582964ec5bb216ce4d68c1ce441d375d8.tar.gz |
Add -o option (POSIX.1-2001) to uudecode(1). Deprecate the -p option
(which allows one to redirect output to stdout); `-o /dev/stdout' is
recommended instead.
Submitted by: Joseph Mallett <jmallett@xMach.org>
MFC after: 2 weeks
Diffstat (limited to 'usr.bin')
-rw-r--r-- | usr.bin/uudecode/uudecode.c | 29 | ||||
-rw-r--r-- | usr.bin/uuencode/uuencode.1 | 21 |
2 files changed, 44 insertions, 6 deletions
diff --git a/usr.bin/uudecode/uudecode.c b/usr.bin/uudecode/uudecode.c index 182bb8f..38e7ec5 100644 --- a/usr.bin/uudecode/uudecode.c +++ b/usr.bin/uudecode/uudecode.c @@ -63,7 +63,8 @@ static const char rcsid[] = #include <unistd.h> const char *filename; -int cflag, iflag, pflag, sflag; +char *outfile; +int cflag, iflag, oflag, pflag, sflag; static void usage __P((void)); int decode __P((void)); @@ -76,18 +77,32 @@ main(argc, argv) { int rval, ch; - while ((ch = getopt(argc, argv, "cips")) != -1) { + while ((ch = getopt(argc, argv, "cio:ps")) != -1) { switch(ch) { case 'c': + if (oflag) + usage(); cflag = 1; /* multiple uudecode'd files */ break; case 'i': iflag = 1; /* ask before override files */ break; + case 'o': + if (cflag || pflag || sflag) + usage(); + 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(); + warnx("-p is deprecated, use `-o /dev/stdout' instead."); pflag = 1; /* print output to stdout */ break; case 's': + if (oflag) + usage(); sflag = 1; /* do not strip pathnames for output */ break; default: @@ -158,7 +173,14 @@ decode2(flag) } while (strncmp(buf, "begin ", 6) || fnmatch("begin [0-7]* *", buf, 0)); - (void)sscanf(buf, "begin %o %[^\n\r]", &mode, buf); + if (oflag) { + (void)sscanf(buf, "begin %o ", &mode); + if (strlcpy(buf, outfile, sizeof(buf)) >= sizeof(buf)) { + warnx("%s: filename too long", outfile); + return (1); + } + } else + (void)sscanf(buf, "begin %o %[^\n\r]", &mode, buf); if (!sflag && !pflag) { strncpy(buffn, buf, sizeof(buffn)); @@ -287,5 +309,6 @@ static void usage() { (void)fprintf(stderr, "usage: uudecode [-cips] [file ...]\n"); + (void)fprintf(stderr, "usage: uudecode [-i] -o output_file [file]\n"); exit(1); } diff --git a/usr.bin/uuencode/uuencode.1 b/usr.bin/uuencode/uuencode.1 index 4a2454d..25d0bf8 100644 --- a/usr.bin/uuencode/uuencode.1 +++ b/usr.bin/uuencode/uuencode.1 @@ -32,7 +32,7 @@ .\" @(#)uuencode.1 8.1 (Berkeley) 6/6/93 .\" $FreeBSD$ .\" -.Dd June 6, 1993 +.Dd January 27, 2002 .Dt UUENCODE 1 .Os .Sh NAME @@ -46,6 +46,10 @@ .Nm uudecode .Op Fl cips .Op Ar +.Nm uudecode +.Op Fl i +.Fl o Ar output_file +.Op file .Sh DESCRIPTION .Nm Uuencode and @@ -72,8 +76,11 @@ for use by transforms .Em uuencoded files (or by default, the standard input) into the original form. -The resulting file is named +The resulting file is named either .Ar name +or (depending on options passed to +.Nm uudecode ) +.Ar output_file and will have the mode of the original file except that setuid and execute bits are not retained. .Nm Uudecode @@ -88,10 +95,18 @@ Decode more than one uuencode'd file from if possible. .It Fl i Do not overwrite files. +.It Fl o Ar output_file +Output to +.Ar output_file +instead of +.Ar name . .It Fl p Decode .Ar file and write output to standard output. +(This option is deprecated in favor of +.Fl o Ar /dev/stdout +\&.) .It Fl s Do not strip output pathname to base filename. By default @@ -124,7 +139,7 @@ The following example extract a compress'ed tar archive from your mailbox .Pp .Bd -literal -offset indent -compact -uudecode -p < $MAIL | zcat | tar xfv - +uudecode -o /dev/stdout < $MAIL | zcat | tar xfv - .Ed .Sh SEE ALSO .Xr basename 1 , |