• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 int ret = 0;
2 const uint8_t *s = (const uint8_t *) src;
3 uint8_t *o = (uint8_t *) out;
4 uint8_t q;
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.eof = state->eof;
11 st.bytes = state->bytes;
12 st.carry = state->carry;
13 
14 // If we previously saw an EOF or an invalid character, bail out:
15 if (st.eof) {
16 	*outlen = 0;
17 	ret = 0;
18 	// If there was a trailing '=' to check, check it:
19 	if (slen && (st.eof == BASE64_AEOF)) {
20 		state->bytes = 0;
21 		state->eof = BASE64_EOF;
22 		ret = ((base64_table_dec_8bit[*s++] == 254) && (slen == 1)) ? 1 : 0;
23 	}
24 	return ret;
25 }
26 
27 // Turn four 6-bit numbers into three bytes:
28 // out[0] = 11111122
29 // out[1] = 22223333
30 // out[2] = 33444444
31 
32 // Duff's device again:
33 switch (st.bytes)
34 {
35 	for (;;)
36 	{
37 	case 0:
38