annotate toys/posix/uuencode.c @ 1433:00c20f410c46 draft

Patches to commands for issues reported from static analysis tool. portability.h.patch - it is for O_CLOEXEC, as compiler complained of it. Makefile.patch - for cleaning generated/*.o files and libopts.dat file [Fixup to uniq.c from Rob.]
author Ashwini Sharma <ak.ashwini1981@gmail.com>
date Tue, 12 Aug 2014 07:09:01 -0500
parents 357b31ae2f04
children c4c9267467f8
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
831
4b9b7c9a194f Finish uuencode cleanup, default y, move it from pending to posix.
Rob Landley <rob@landley.net>
parents:
diff changeset
1 /* uuencode.c - uuencode / base64 encode
4b9b7c9a194f Finish uuencode cleanup, default y, move it from pending to posix.
Rob Landley <rob@landley.net>
parents:
diff changeset
2 *
4b9b7c9a194f Finish uuencode cleanup, default y, move it from pending to posix.
Rob Landley <rob@landley.net>
parents:
diff changeset
3 * Copyright 2013 Erich Plondke <toybox@erich.wreck.org>
4b9b7c9a194f Finish uuencode cleanup, default y, move it from pending to posix.
Rob Landley <rob@landley.net>
parents:
diff changeset
4 *
4b9b7c9a194f Finish uuencode cleanup, default y, move it from pending to posix.
Rob Landley <rob@landley.net>
parents:
diff changeset
5 * See http://pubs.opengroup.org/onlinepubs/9699919799/utilities/uuencode.html
4b9b7c9a194f Finish uuencode cleanup, default y, move it from pending to posix.
Rob Landley <rob@landley.net>
parents:
diff changeset
6
4b9b7c9a194f Finish uuencode cleanup, default y, move it from pending to posix.
Rob Landley <rob@landley.net>
parents:
diff changeset
7 USE_UUENCODE(NEWTOY(uuencode, "<1>2m", TOYFLAG_USR|TOYFLAG_BIN))
4b9b7c9a194f Finish uuencode cleanup, default y, move it from pending to posix.
Rob Landley <rob@landley.net>
parents:
diff changeset
8
4b9b7c9a194f Finish uuencode cleanup, default y, move it from pending to posix.
Rob Landley <rob@landley.net>
parents:
diff changeset
9 config UUENCODE
4b9b7c9a194f Finish uuencode cleanup, default y, move it from pending to posix.
Rob Landley <rob@landley.net>
parents:
diff changeset
10 bool "uuencode"
4b9b7c9a194f Finish uuencode cleanup, default y, move it from pending to posix.
Rob Landley <rob@landley.net>
parents:
diff changeset
11 default y
4b9b7c9a194f Finish uuencode cleanup, default y, move it from pending to posix.
Rob Landley <rob@landley.net>
parents:
diff changeset
12 help
4b9b7c9a194f Finish uuencode cleanup, default y, move it from pending to posix.
Rob Landley <rob@landley.net>
parents:
diff changeset
13 usage: uuencode [-m] [file] encode-filename
4b9b7c9a194f Finish uuencode cleanup, default y, move it from pending to posix.
Rob Landley <rob@landley.net>
parents:
diff changeset
14
4b9b7c9a194f Finish uuencode cleanup, default y, move it from pending to posix.
Rob Landley <rob@landley.net>
parents:
diff changeset
15 Uuencode stdin (or file) to stdout, with encode-filename in the output.
4b9b7c9a194f Finish uuencode cleanup, default y, move it from pending to posix.
Rob Landley <rob@landley.net>
parents:
diff changeset
16
4b9b7c9a194f Finish uuencode cleanup, default y, move it from pending to posix.
Rob Landley <rob@landley.net>
parents:
diff changeset
17 -m base64-encode
4b9b7c9a194f Finish uuencode cleanup, default y, move it from pending to posix.
Rob Landley <rob@landley.net>
parents:
diff changeset
18 */
4b9b7c9a194f Finish uuencode cleanup, default y, move it from pending to posix.
Rob Landley <rob@landley.net>
parents:
diff changeset
19
4b9b7c9a194f Finish uuencode cleanup, default y, move it from pending to posix.
Rob Landley <rob@landley.net>
parents:
diff changeset
20 #define FOR_uuencode
4b9b7c9a194f Finish uuencode cleanup, default y, move it from pending to posix.
Rob Landley <rob@landley.net>
parents:
diff changeset
21 #include "toys.h"
4b9b7c9a194f Finish uuencode cleanup, default y, move it from pending to posix.
Rob Landley <rob@landley.net>
parents:
diff changeset
22
4b9b7c9a194f Finish uuencode cleanup, default y, move it from pending to posix.
Rob Landley <rob@landley.net>
parents:
diff changeset
23 void uuencode_main(void)
4b9b7c9a194f Finish uuencode cleanup, default y, move it from pending to posix.
Rob Landley <rob@landley.net>
parents:
diff changeset
24 {
4b9b7c9a194f Finish uuencode cleanup, default y, move it from pending to posix.
Rob Landley <rob@landley.net>
parents:
diff changeset
25 char *p, *name = toys.optargs[toys.optc-1], buf[(76/4)*3];
4b9b7c9a194f Finish uuencode cleanup, default y, move it from pending to posix.
Rob Landley <rob@landley.net>
parents:
diff changeset
26
4b9b7c9a194f Finish uuencode cleanup, default y, move it from pending to posix.
Rob Landley <rob@landley.net>
parents:
diff changeset
27 int i, m = toys.optflags & FLAG_m, fd = 0;
4b9b7c9a194f Finish uuencode cleanup, default y, move it from pending to posix.
Rob Landley <rob@landley.net>
parents:
diff changeset
28
4b9b7c9a194f Finish uuencode cleanup, default y, move it from pending to posix.
Rob Landley <rob@landley.net>
parents:
diff changeset
29 if (toys.optc > 1) fd = xopen(toys.optargs[0], O_RDONLY);
4b9b7c9a194f Finish uuencode cleanup, default y, move it from pending to posix.
Rob Landley <rob@landley.net>
parents:
diff changeset
30
4b9b7c9a194f Finish uuencode cleanup, default y, move it from pending to posix.
Rob Landley <rob@landley.net>
parents:
diff changeset
31 // base64 table
4b9b7c9a194f Finish uuencode cleanup, default y, move it from pending to posix.
Rob Landley <rob@landley.net>
parents:
diff changeset
32
4b9b7c9a194f Finish uuencode cleanup, default y, move it from pending to posix.
Rob Landley <rob@landley.net>
parents:
diff changeset
33 p = toybuf;
4b9b7c9a194f Finish uuencode cleanup, default y, move it from pending to posix.
Rob Landley <rob@landley.net>
parents:
diff changeset
34 for (i = 'A'; i != ':'; i++) {
4b9b7c9a194f Finish uuencode cleanup, default y, move it from pending to posix.
Rob Landley <rob@landley.net>
parents:
diff changeset
35 if (i == 'Z'+1) i = 'a';
4b9b7c9a194f Finish uuencode cleanup, default y, move it from pending to posix.
Rob Landley <rob@landley.net>
parents:
diff changeset
36 if (i == 'z'+1) i = '0';
4b9b7c9a194f Finish uuencode cleanup, default y, move it from pending to posix.
Rob Landley <rob@landley.net>
parents:
diff changeset
37 *(p++) = i;
4b9b7c9a194f Finish uuencode cleanup, default y, move it from pending to posix.
Rob Landley <rob@landley.net>
parents:
diff changeset
38 }
4b9b7c9a194f Finish uuencode cleanup, default y, move it from pending to posix.
Rob Landley <rob@landley.net>
parents:
diff changeset
39 *(p++) = '+';
4b9b7c9a194f Finish uuencode cleanup, default y, move it from pending to posix.
Rob Landley <rob@landley.net>
parents:
diff changeset
40 *(p++) = '/';
4b9b7c9a194f Finish uuencode cleanup, default y, move it from pending to posix.
Rob Landley <rob@landley.net>
parents:
diff changeset
41
4b9b7c9a194f Finish uuencode cleanup, default y, move it from pending to posix.
Rob Landley <rob@landley.net>
parents:
diff changeset
42 xprintf("begin%s 744 %s\n", m ? "-base64" : "", name);
4b9b7c9a194f Finish uuencode cleanup, default y, move it from pending to posix.
Rob Landley <rob@landley.net>
parents:
diff changeset
43 for (;;) {
4b9b7c9a194f Finish uuencode cleanup, default y, move it from pending to posix.
Rob Landley <rob@landley.net>
parents:
diff changeset
44 char *in;
4b9b7c9a194f Finish uuencode cleanup, default y, move it from pending to posix.
Rob Landley <rob@landley.net>
parents:
diff changeset
45
4b9b7c9a194f Finish uuencode cleanup, default y, move it from pending to posix.
Rob Landley <rob@landley.net>
parents:
diff changeset
46 if (!(i = xread(fd, buf, m ? sizeof(buf) : 45))) break;
4b9b7c9a194f Finish uuencode cleanup, default y, move it from pending to posix.
Rob Landley <rob@landley.net>
parents:
diff changeset
47
4b9b7c9a194f Finish uuencode cleanup, default y, move it from pending to posix.
Rob Landley <rob@landley.net>
parents:
diff changeset
48 if (!m) xputc(i+32);
4b9b7c9a194f Finish uuencode cleanup, default y, move it from pending to posix.
Rob Landley <rob@landley.net>
parents:
diff changeset
49 in = buf;
4b9b7c9a194f Finish uuencode cleanup, default y, move it from pending to posix.
Rob Landley <rob@landley.net>
parents:
diff changeset
50
4b9b7c9a194f Finish uuencode cleanup, default y, move it from pending to posix.
Rob Landley <rob@landley.net>
parents:
diff changeset
51 for (in = buf; in-buf < i; ) {
4b9b7c9a194f Finish uuencode cleanup, default y, move it from pending to posix.
Rob Landley <rob@landley.net>
parents:
diff changeset
52 int j, x, bytes = i - (in-buf);
4b9b7c9a194f Finish uuencode cleanup, default y, move it from pending to posix.
Rob Landley <rob@landley.net>
parents:
diff changeset
53
4b9b7c9a194f Finish uuencode cleanup, default y, move it from pending to posix.
Rob Landley <rob@landley.net>
parents:
diff changeset
54 if (bytes > 3) bytes = 3;
4b9b7c9a194f Finish uuencode cleanup, default y, move it from pending to posix.
Rob Landley <rob@landley.net>
parents:
diff changeset
55
4b9b7c9a194f Finish uuencode cleanup, default y, move it from pending to posix.
Rob Landley <rob@landley.net>
parents:
diff changeset
56 for (j = x = 0; j<4; j++) {
4b9b7c9a194f Finish uuencode cleanup, default y, move it from pending to posix.
Rob Landley <rob@landley.net>
parents:
diff changeset
57 int out;
4b9b7c9a194f Finish uuencode cleanup, default y, move it from pending to posix.
Rob Landley <rob@landley.net>
parents:
diff changeset
58
4b9b7c9a194f Finish uuencode cleanup, default y, move it from pending to posix.
Rob Landley <rob@landley.net>
parents:
diff changeset
59 if (j < bytes) x |= (*(in++) & 0x0ff) << (8*(2-j));
4b9b7c9a194f Finish uuencode cleanup, default y, move it from pending to posix.
Rob Landley <rob@landley.net>
parents:
diff changeset
60 out = (x>>((3-j)*6)) & 0x3f;
853
357b31ae2f04 uuencode tweak: output a non-whitespace character for 0 in traditional mode.
Rob Landley <rob@landley.net>
parents: 831
diff changeset
61 xputc(m ? (j > bytes ? '=' : toybuf[out]) : (out ? out + 0x20 : 0x60));
831
4b9b7c9a194f Finish uuencode cleanup, default y, move it from pending to posix.
Rob Landley <rob@landley.net>
parents:
diff changeset
62 }
4b9b7c9a194f Finish uuencode cleanup, default y, move it from pending to posix.
Rob Landley <rob@landley.net>
parents:
diff changeset
63 }
4b9b7c9a194f Finish uuencode cleanup, default y, move it from pending to posix.
Rob Landley <rob@landley.net>
parents:
diff changeset
64 xputc('\n');
4b9b7c9a194f Finish uuencode cleanup, default y, move it from pending to posix.
Rob Landley <rob@landley.net>
parents:
diff changeset
65 }
4b9b7c9a194f Finish uuencode cleanup, default y, move it from pending to posix.
Rob Landley <rob@landley.net>
parents:
diff changeset
66 xputs(m ? "====" : "end");
4b9b7c9a194f Finish uuencode cleanup, default y, move it from pending to posix.
Rob Landley <rob@landley.net>
parents:
diff changeset
67 }