summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorKiyoshi Aman <kiyoshi.aman+adelie@gmail.com>2019-06-20 02:01:06 -0500
committerKiyoshi Aman <kiyoshi.aman+adelie@gmail.com>2019-06-20 02:01:06 -0500
commitd8caa0d160294c388bc435c91a7e02e1b2bc8f3b (patch)
treeb962aab074d09df2261caffdf1bbb9cbdc162c2b
parentb1c8daa0f30e9720caefd7fb1e501fb4a21486f9 (diff)
downloaduserland-d8caa0d160294c388bc435c91a7e02e1b2bc8f3b.tar.gz
userland-d8caa0d160294c388bc435c91a7e02e1b2bc8f3b.tar.bz2
userland-d8caa0d160294c388bc435c91a7e02e1b2bc8f3b.tar.xz
userland-d8caa0d160294c388bc435c91a7e02e1b2bc8f3b.zip
usr.bin/uudecode: make buildable with libbsd, remove nonstandard base64 support
-rw-r--r--usr.bin/uudecode/uudecode.c140
1 files 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 <sys/cdefs.h>
-#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 <locale.h>
#include <pwd.h>
#include <stdio.h>
-#include <stdlib.h>
+#include <bsd/stdlib.h>
#include <string.h>
#include <unistd.h>
-#ifndef NO_BASE64
-#include <netinet/in.h>
-#include <resolv.h>
-#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)