summaryrefslogtreecommitdiffstats
path: root/usr.bin
diff options
context:
space:
mode:
authormike <mike@FreeBSD.org>2002-01-27 18:21:23 +0000
committermike <mike@FreeBSD.org>2002-01-27 18:21:23 +0000
commit7e26e18582964ec5bb216ce4d68c1ce441d375d8 (patch)
tree6ae7c1c1eee23b4c5f19270e93685c55f5766902 /usr.bin
parent9fdf88975bc0d2bd305b2bf4f93639a9e2dd2f3b (diff)
downloadFreeBSD-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.c29
-rw-r--r--usr.bin/uuencode/uuencode.121
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 ,
OpenPOWER on IntegriCloud