]> git.tuebingen.mpg.de Git - paraslash.git/blobdiff - base64.c
base64: Replace Pad64 variable by macro.
[paraslash.git] / base64.c
index 4809a2f285f63dd83132f693be23f68945fce21d..9188e92bca3dead3af8006f9108d5978a403fd5a 100644 (file)
--- a/base64.c
+++ b/base64.c
 
 static const char Base64[] =
        "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/";
-static const char Pad64 = '=';
 
 /** Maximal possible size of the decoded data. */
 #define BASE64_MAX_DECODED_SIZE(_encoded_size) ((_encoded_size) / 4 * 3)
 
+#define PAD64 '='
 /**
  * base64-decode a buffer.
  *
@@ -46,12 +46,10 @@ int base64_decode(char const *src, size_t encoded_size, char **result,
        char *pos;
        const char *end = src + encoded_size;
        unsigned char *target;
-       size_t targsize;
 
        if (encoded_size == (size_t)-1)
                encoded_size = strlen(src);
-       targsize = BASE64_MAX_DECODED_SIZE(encoded_size);
-       target = para_malloc(targsize + 1);
+       target = para_malloc(BASE64_MAX_DECODED_SIZE(encoded_size) + 1);
 
        state = 0;
        tarindex = 0;
@@ -61,7 +59,7 @@ int base64_decode(char const *src, size_t encoded_size, char **result,
                if (para_isspace(ch)) /* Skip whitespace anywhere. */
                        continue;
 
-               if (ch == Pad64)
+               if (ch == PAD64)
                        break;
 
                pos = strchr(Base64, ch);
@@ -70,30 +68,22 @@ int base64_decode(char const *src, size_t encoded_size, char **result,
 
                switch (state) {
                case 0:
-                       if (tarindex >= targsize)
-                               goto fail;
                        target[tarindex] = (pos - Base64) << 2;
                        state = 1;
                        break;
                case 1:
-                       if (tarindex + 1 >= targsize)
-                               goto fail;
                        target[tarindex] |= (pos - Base64) >> 4;
                        target[tarindex + 1] = ((pos - Base64) & 0x0f) << 4;
                        tarindex++;
                        state = 2;
                        break;
                case 2:
-                       if (tarindex + 1 >= targsize)
-                               goto fail;
                        target[tarindex] |= (pos - Base64) >> 2;
                        target[tarindex + 1] = ((pos - Base64) & 0x03) << 6;
                        tarindex++;
                        state = 3;
                        break;
                case 3:
-                       if (tarindex >= targsize)
-                               goto fail;
                        target[tarindex] |= pos - Base64;
                        tarindex++;
                        state = 0;
@@ -106,7 +96,7 @@ int base64_decode(char const *src, size_t encoded_size, char **result,
         * on a byte boundary, and/or with erroneous trailing characters.
         */
 
-       if (*src == Pad64) {            /* We got a pad char. */
+       if (*src == PAD64) {            /* We got a pad char. */
                ch = *src++;            /* Skip it, get next. */
                switch (state) {
                case 0:         /* Invalid = in first position */
@@ -119,7 +109,7 @@ int base64_decode(char const *src, size_t encoded_size, char **result,
                                if (!isspace(ch))
                                        break;
                        /* Make sure there is another trailing = sign. */
-                       if (ch != Pad64)
+                       if (ch != PAD64)
                                goto fail;
                        ch = *src++;            /* Skip the = */
                        /* Fall through to "single trailing =" case. */