1 // Assume that *out is large enough to contain the output. 2 // Theoretically it should be 4/3 the length of src. 3 const uint8_t *s = (const uint8_t *) src; 4 uint8_t *o = (uint8_t *) out; 5 6 // Use local temporaries to avoid cache thrashing: 7 size_t olen = 0; 8 size_t slen = srclen; 9 struct base64_state st; 10 st.bytes = state->bytes; 11 st.carry = state->carry; 12 13 // Turn three bytes into four 6-bit numbers: 14 // in[0] = 00111111 15 // in[1] = 00112222 16 // in[2] = 00222233 17 // in[3] = 00333333 18 19 // Duff's device, a for() loop inside a switch() statement. Legal! 20 switch (st.bytes) 21 { 22 for (;;) 23 { 24 case 0: 25