-/** @brief Convert MIME base64
- * @param s base64 data
- * @return Decoded data
- */
-char *mime_base64(const char *s) {
- struct dynstr d;
- const char *t;
- int b[4], n, c;
- static const char table[] =
- "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/";
-
- dynstr_init(&d);
- n = 0;
- while((c = (unsigned char)*s++)) {
- if((t = strchr(table, c))) {
- b[n++] = t - table;
- if(n == 4) {
- dynstr_append(&d, (b[0] << 2) + (b[1] >> 4));
- dynstr_append(&d, (b[1] << 4) + (b[2] >> 2));
- dynstr_append(&d, (b[2] << 6) + b[3]);
- n = 0;
- }
- } else if(c == '=') {
- 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;
- }
- }
- dynstr_terminate(&d);
- return d.vec;
-}
-