uudecode: nuke duplicate base64_table[]. saves 65 bytes
authorDenis Vlasenko <vda.linux@googlemail.com>
Tue, 12 Jun 2007 07:24:11 +0000 (07:24 -0000)
committerDenis Vlasenko <vda.linux@googlemail.com>
Tue, 12 Jun 2007 07:24:11 +0000 (07:24 -0000)
coreutils/uudecode.c
libbb/uuencode.c

index 287386d..2dd8f94 100644 (file)
@@ -68,8 +68,6 @@ static void read_stduu(FILE *src_stream, FILE *dst_stream)
 
 static void read_base64(FILE *src_stream, FILE *dst_stream)
 {
-       static const char base64_table[] =
-               "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=\n";
        int term_count = 1;
 
        while (1) {
@@ -80,17 +78,20 @@ static void read_base64(FILE *src_stream, FILE *dst_stream)
                        char *table_ptr;
                        int ch;
 
-                       /* Get next _valid_ character */
+                       /* Get next _valid_ character.
+                        * global vector bb_uuenc_tbl_base64[] contains this string:
+                        * "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=\n"
+                        */
                        do {
                                ch = fgetc(src_stream);
                                if (ch == EOF) {
                                        bb_error_msg_and_die("short file");
                                }
-                               table_ptr = strchr(base64_table, ch);
+                               table_ptr = strchr(bb_uuenc_tbl_base64, ch);
                        } while (table_ptr == NULL);
 
-                       /* Convert encoded charcter to decimal */
-                       ch = table_ptr - base64_table;
+                       /* Convert encoded character to decimal */
+                       ch = table_ptr - bb_uuenc_tbl_base64;
 
                        if (*table_ptr == '=') {
                                if (term_count == 0) {
index 3840120..bbb92d6 100644 (file)
@@ -8,7 +8,7 @@
 #include "libbb.h"
 
 /* Conversion table.  for base 64 */
-const char bb_uuenc_tbl_base64[65] = {
+const char bb_uuenc_tbl_base64[65 + 2] = {
        'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H',
        'I', 'J', 'K', 'L', 'M', 'N', 'O', 'P',
        'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X',
@@ -17,7 +17,8 @@ const char bb_uuenc_tbl_base64[65] = {
        'o', 'p', 'q', 'r', 's', 't', 'u', 'v',
        'w', 'x', 'y', 'z', '0', '1', '2', '3',
        '4', '5', '6', '7', '8', '9', '+', '/',
-       '=' /* termination character */
+       '=' /* termination character */,
+       '\n', '\0' /* needed for uudecode.c */
 };
 
 const char bb_uuenc_tbl_std[65] = {