Files
2024-02-13 13:37:55 -06:00

38 lines
879 B
C

#include "misc.h"
void base64_decode_bs(BinarySink *bs, ptrlen input)
{
BinarySource src[1];
BinarySource_BARE_INIT_PL(src, input);
while (get_avail(src)) {
char b64atom[4];
unsigned char binatom[3];
for (size_t i = 0; i < 4 ;) {
char c = get_byte(src);
if (get_err(src))
c = '=';
if (c == '\n' || c == '\r')
continue;
b64atom[i++] = c;
}
put_data(bs, binatom, base64_decode_atom(b64atom, binatom));
}
}
void base64_decode_fp(FILE *fp, ptrlen input)
{
stdio_sink ss;
stdio_sink_init(&ss, fp);
base64_decode_bs(BinarySink_UPCAST(&ss), input);
}
strbuf *base64_decode_sb(ptrlen input)
{
strbuf *sb = strbuf_new_nm();
base64_decode_bs(BinarySink_UPCAST(sb), input);
return sb;
}