X-Git-Url: https://git.distorted.org.uk/~mdw/disorder/blobdiff_plain/86e3aea7faeeed443729e174fc1339f08b72086a..2b2a5fed939a267d9ab95ce900a15bf11e108edf:/lib/base64.c diff --git a/lib/base64.c b/lib/base64.c index 7ba4730..d794182 100644 --- a/lib/base64.c +++ b/lib/base64.c @@ -65,7 +65,14 @@ char *generic_base64(const char *s, size_t *nsp, const char *table) { dynstr_init(&d); n = 0; while((c = (unsigned char)*s++)) { - if((t = strchr(table, c))) { + if(c == table[64]) { + if(n >= 2) { + dynstr_append(&d, (b[0] << 2) + (b[1] >> 4)); + if(n == 3) + dynstr_append(&d, (b[1] << 4) + (b[2] >> 2)); + } + break; + } else if((t = strchr(table, c))) { b[n++] = t - table; if(n == 4) { dynstr_append(&d, (b[0] << 2) + (b[1] >> 4)); @@ -73,13 +80,6 @@ char *generic_base64(const char *s, size_t *nsp, const char *table) { dynstr_append(&d, (b[2] << 6) + b[3]); n = 0; } - } else if(c == table[64]) { - if(n >= 2) { - dynstr_append(&d, (b[0] << 2) + (b[1] >> 4)); - if(n == 3) - dynstr_append(&d, (b[1] << 4) + (b[2] >> 2)); - } - break; } } if(nsp)