diff options
Diffstat (limited to 'usr.bin/uudecode/uudecode.c')
-rw-r--r-- | usr.bin/uudecode/uudecode.c | 187 |
1 files changed, 0 insertions, 187 deletions
diff --git a/usr.bin/uudecode/uudecode.c b/usr.bin/uudecode/uudecode.c deleted file mode 100644 index af87847..0000000 --- a/usr.bin/uudecode/uudecode.c +++ /dev/null @@ -1,187 +0,0 @@ -/*- - * Copyright (c) 1983, 1993 - * The Regents of the University of California. All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the distribution. - * 3. All advertising materials mentioning features or use of this software - * must display the following acknowledgement: - * This product includes software developed by the University of - * California, Berkeley and its contributors. - * 4. Neither the name of the University nor the names of its contributors - * may be used to endorse or promote products derived from this software - * without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND - * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE - * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE - * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL - * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS - * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) - * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT - * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY - * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF - * SUCH DAMAGE. - */ - -#ifndef lint -char copyright[] = -"@(#) Copyright (c) 1983, 1993\n\ - The Regents of the University of California. All rights reserved.\n"; -#endif /* not lint */ - -#ifndef lint -static char sccsid[] = "@(#)uudecode.c 8.2 (Berkeley) 4/2/94"; -#endif /* not lint */ - -/* - * uudecode [file ...] - * - * create the specified file, decoding as you go. - * used with uuencode. - */ -#include <sys/param.h> -#include <sys/stat.h> - -#include <pwd.h> -#include <stdio.h> -#include <string.h> - -char *filename; - -int -main(argc, argv) - int argc; - char *argv[]; -{ - extern int errno; - int rval; - - if (*++argv) { - rval = 0; - do { - if (!freopen(filename = *argv, "r", stdin)) { - (void)fprintf(stderr, "uudecode: %s: %s\n", - *argv, strerror(errno)); - rval = 1; - continue; - } - rval |= decode(); - } while (*++argv); - } else { - filename = "stdin"; - rval = decode(); - } - exit(rval); -} - -decode() -{ - extern int errno; - struct passwd *pw; - register int n; - register char ch, *p; - int mode, n1; - char buf[MAXPATHLEN]; - - /* search for header line */ - do { - if (!fgets(buf, sizeof(buf), stdin)) { - (void)fprintf(stderr, - "uudecode: %s: no \"begin\" line\n", filename); - return(1); - } - } while (strncmp(buf, "begin ", 6)); - (void)sscanf(buf, "begin %o %s", &mode, buf); - - /* handle ~user/file format */ - if (buf[0] == '~') { - if (!(p = index(buf, '/'))) { - (void)fprintf(stderr, "uudecode: %s: illegal ~user.\n", - filename); - return(1); - } - *p++ = NULL; - if (!(pw = getpwnam(buf + 1))) { - (void)fprintf(stderr, "uudecode: %s: no user %s.\n", - filename, buf); - return(1); - } - n = strlen(pw->pw_dir); - n1 = strlen(p); - if (n + n1 + 2 > MAXPATHLEN) { - (void)fprintf(stderr, "uudecode: %s: path too long.\n", - filename); - return(1); - } - bcopy(p, buf + n + 1, n1 + 1); - bcopy(pw->pw_dir, buf, n); - buf[n] = '/'; - } - - /* create output file, set mode */ - if (!freopen(buf, "w", stdout) || - fchmod(fileno(stdout), mode&0666)) { - (void)fprintf(stderr, "uudecode: %s: %s: %s\n", buf, - filename, strerror(errno)); - return(1); - } - - /* for each input line */ - for (;;) { - if (!fgets(p = buf, sizeof(buf), stdin)) { - (void)fprintf(stderr, "uudecode: %s: short file.\n", - filename); - 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) { - 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); - } - } - } - if (!fgets(buf, sizeof(buf), stdin) || strcmp(buf, "end\n")) { - (void)fprintf(stderr, "uudecode: %s: no \"end\" line.\n", - filename); - return(1); - } - return(0); -} - -usage() -{ - (void)fprintf(stderr, "usage: uudecode [file ...]\n"); - exit(1); -} |