1234567891011121314151617181920212223242526272829303132333435363738 |
- #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;
- }
|