• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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