From d8caa0d160294c388bc435c91a7e02e1b2bc8f3b Mon Sep 17 00:00:00 2001 From: Kiyoshi Aman Date: Thu, 20 Jun 2019 02:01:06 -0500 Subject: usr.bin/uudecode: make buildable with libbsd, remove nonstandard base64 support --- usr.bin/uudecode/uudecode.c | 140 +++++++++++++------------------------------- 1 file changed, 40 insertions(+), 100 deletions(-) diff --git a/usr.bin/uudecode/uudecode.c b/usr.bin/uudecode/uudecode.c index 977ace2..d1fd8da 100644 --- a/usr.bin/uudecode/uudecode.c +++ b/usr.bin/uudecode/uudecode.c @@ -29,20 +29,6 @@ * SUCH DAMAGE. */ -#if HAVE_NBTOOL_CONFIG_H -#include "nbtool_config.h" -#endif - -#include -#if !defined(lint) -__COPYRIGHT("@(#) Copyright (c) 1983, 1993\ - The Regents of the University of California. All rights reserved."); -#if 0 -static char sccsid[] = "@(#)uudecode.c 8.2 (Berkeley) 4/2/94"; -#endif -__RCSID("$NetBSD: uudecode.c,v 1.28 2013/01/28 19:50:30 apb Exp $"); -#endif /* not lint */ - /* * uudecode [file ...] * @@ -58,21 +44,14 @@ __RCSID("$NetBSD: uudecode.c,v 1.28 2013/01/28 19:50:30 apb Exp $"); #include #include #include -#include +#include #include #include -#ifndef NO_BASE64 -#include -#include -#endif - static int decode(char *); -__dead static void usage(void); +static void usage(void); static int checkend(const char *, const char *, const char *); -static int base64_decode(void); -static int base64; static const char *inputname; int @@ -86,14 +65,11 @@ main(int argc, char *argv[]) while ((ch = getopt(argc, argv, "mo:p")) != -1) switch (ch) { - case 'm': - base64 = 1; - break; case 'o': outputname = optarg; break; case 'p': - outputname = __UNCONST("/dev/stdout"); + outputname = "/dev/stdout"; break; default: usage(); @@ -136,16 +112,11 @@ decode(char *outputname) /* search for header line */ for (;;) { if (!fgets(buf, sizeof(buf), stdin)) { - warnx("%s: no \"%s\" line", inputname, base64 ? - "begin-base64" : "begin"); + warnx("%s: no \"%s\" line", inputname, "begin"); return(1); } p = buf; - if (strncmp(p, "begin-base64", 12) == 0) { - base64 = 1; - p += 13; - break; - } else if (strncmp(p, "begin", 5) == 0) { + if (strncmp(p, "begin", 5) == 0) { p += 6; break; } else @@ -156,15 +127,13 @@ decode(char *outputname) mode = strtol(p, &fn, 8); if (fn == (p) || !isspace((unsigned char)*fn) || mode==LONG_MIN || mode==LONG_MAX) { - warnx("%s: invalid mode on \"%s\" line", inputname, - base64 ? "begin-base64" : "begin"); + warnx("%s: invalid mode on \"%s\" line", inputname, "begin"); return(1); } /* skip whitespace for file name */ while (*fn && isspace((unsigned char)*fn)) fn++; if (*fn == 0) { - warnx("%s: no filename on \"%s\" line", inputname, - base64 ? "begin-base64" : "begin"); + warnx("%s: no filename on \"%s\" line", inputname, "begin"); return(1); } /* zap newline */ @@ -225,52 +194,48 @@ decode(char *outputname) } } - if (base64) - return base64_decode(); - else { - /* for each input line */ - for (;;) { - if (!fgets(p = buf, sizeof(buf), stdin)) { - warnx("%s: short file.", inputname); - return(1); - } + /* for each input line */ + for (;;) { + if (!fgets(p = buf, sizeof(buf), stdin)) { + warnx("%s: short file.", inputname); + return(1); + } #define DEC(c) (((c) - ' ') & 077) /* single character decode */ - /* - * `n' is used to avoid writing out all the characters - * at the end of the file. - */ - if ((n = DEC(*p)) <= 0) - break; - for (++p; n > 0; p += 4, n -= 3) - if (n >= 3) { + /* + * `n' is used to avoid writing out all the characters + * at the end of the file. + */ + if ((n = DEC(*p)) <= 0) + break; + for (++p; n > 0; p += 4, n -= 3) + if (n >= 3) { + ch = DEC(p[0]) << 2 | DEC(p[1]) >> 4; + putchar(ch); + ch = DEC(p[1]) << 4 | DEC(p[2]) >> 2; + putchar(ch); + ch = DEC(p[2]) << 6 | DEC(p[3]); + putchar(ch); + } + else { + if (n >= 1) { ch = DEC(p[0]) << 2 | DEC(p[1]) >> 4; putchar(ch); + } + if (n >= 2) { ch = DEC(p[1]) << 4 | DEC(p[2]) >> 2; putchar(ch); + } + if (n >= 3) { ch = DEC(p[2]) << 6 | DEC(p[3]); putchar(ch); } - else { - if (n >= 1) { - ch = DEC(p[0]) << 2 | DEC(p[1]) >> 4; - putchar(ch); - } - if (n >= 2) { - ch = DEC(p[1]) << 4 | DEC(p[2]) >> 2; - putchar(ch); - } - if (n >= 3) { - ch = DEC(p[2]) << 6 | DEC(p[3]); - putchar(ch); - } - } - } - if (!fgets(buf, sizeof(buf), stdin) || strcmp(buf, "end\n")) { - warnx("%s: no \"end\" line.", inputname); - return(1); - } - return(0); + } } + if (!fgets(buf, sizeof(buf), stdin) || strcmp(buf, "end\n")) { + warnx("%s: no \"end\" line.", inputname); + return(1); + } + return(0); } static int @@ -287,31 +252,6 @@ checkend(const char *ptr, const char *end, const char *msg) return (0); } -static int -base64_decode(void) -{ - int n; - char inbuf[MAXPATHLEN]; - unsigned char outbuf[MAXPATHLEN * 4]; - - for (;;) { - if (!fgets(inbuf, sizeof(inbuf), stdin)) { - warnx("%s: short file.", inputname); - return (1); - } -#ifdef NO_BASE64 - warnx("%s: base64 decoding is not supported", inputname); - return (1); -#else - n = b64_pton(inbuf, outbuf, sizeof(outbuf)); -#endif - if (n < 0) - break; - fwrite(outbuf, 1, n, stdout); - } - return (checkend(inbuf, "====", - "error decoding base64 input stream")); -} static void usage(void) -- cgit v1.2.3-60-g2f50