[hackers] [sbase] Add uuencode(1) || sin

From: <git_AT_suckless.org>
Date: Fri, 31 Jan 2014 16:29:15 +0100

commit aab53ef1972ca149f5e0371539d78d17ec89e3f5
Author: sin <sin_AT_2f30.org>
Date: Fri Jan 31 15:24:38 2014 +0000

    Add uuencode(1)

diff --git a/Makefile b/Makefile
index 8a6790e..f8469df 100644
--- a/Makefile
+++ b/Makefile
_AT_@ -85,6 +85,7 @@ SRC = \
         tr.c \
         true.c \
         tty.c \
+ uuencode.c \
         uname.c \
         uniq.c \
         unlink.c \
diff --git a/uuencode.1 b/uuencode.1
new file mode 100644
index 0000000..06ced88
--- /dev/null
+++ b/uuencode.1
_AT_@ -0,0 +1,16 @@
+.TH UUENCODE 1 sbase\-VERSION
+.SH NAME
+uuencode \- encode a binary file
+.SH SYNOPSIS
+.B uuencode
+.RI [file]
+.RB name
+.SH DESCRIPTION
+.B uuencode
+reads file (or by default, the standard input) and writes an encoded
+version to the standard output. The encoding uses only printing ASCII
+characters and includes the mode of the file and the operand name
+for use by uudecode.
+.SH NOTES
+This version of uuencode does not currently support the base64
+encoding algorithm.
diff --git a/uuencode.c b/uuencode.c
new file mode 100644
index 0000000..a400180
--- /dev/null
+++ b/uuencode.c
_AT_@ -0,0 +1,77 @@
+/* See LICENSE file for copyright and license details. */
+#include <stdio.h>
+#include <stdlib.h>
+#include <sys/stat.h>
+#include <sys/types.h>
+#include <unistd.h>
+#include "util.h"
+
+static void uuencode(FILE *, const char *, const char *);
+
+static void
+usage(void)
+{
+ eprintf("usage: %s [file] name
", argv0);
+}
+
+int
+main(int argc, char *argv[])
+{
+ FILE *fp;
+
+ ARGBEGIN {
+ case 'm':
+ eprintf("-m not implemented
");
+ default:
+ usage();
+ } ARGEND;
+
+ if (argc == 0 || argc > 2)
+ usage();
+
+ if (argc == 1) {
+ uuencode(stdin, argv[0], "<stdin>");
+ } else {
+ if (!(fp = fopen(argv[0], "r")))
+ eprintf("fopen %s:", argv[0]);
+ uuencode(fp, argv[1], argv[0]);
+ fclose(fp);
+ }
+ return EXIT_SUCCESS;
+}
+
+static void
+uuencode(FILE *fp, const char *name, const char *s)
+{
+ struct stat st;
+ unsigned char buf[80], *p;
+ ssize_t n;
+ int ch;
+
+ if (fstat(fileno(fp), &st) < 0)
+ eprintf("fstat %s:", s);
+ fprintf(stdout, "begin %o %s
", st.st_mode & 0777, name);
+ while ((n = fread(buf, 1, 45, fp))) {
+ ch = ' ' + (n & 0x3f);
+ fputc(ch == ' ' ? '`' : ch, stdout);
+ for (p = buf; n > 0; n -= 3, p += 3) {
+ if (n < 3) {
+ p[2] = '
Received on Fri Jan 31 2014 - 16:29:15 CET

This archive was generated by hypermail 2.3.0 : Fri Jan 31 2014 - 16:36:08 CET