]>
git.ipfire.org Git - thirdparty/squid.git/blob - lib/uudecode.c
2 * Copyright (C) 1996-2014 The Squid Software Foundation and contributors
4 * Squid software is distributed under GPLv2+ license and includes
5 * contributions from numerous individuals and organizations.
6 * Please see the COPYING and CONTRIBUTORS files for details.
12 /* aaaack but it's fast and const should make it shared text page. */
13 const int pr2six
[256] = {
14 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64,
15 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 62, 64, 64, 64, 63,
16 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 64, 64, 64, 64, 64, 64, 64, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9,
17 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 64, 64, 64, 64, 64, 64, 26, 27,
18 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51,
19 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64,
20 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64,
21 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64,
22 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64,
23 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64,
24 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64
28 uudecode(const char *bufcoded
)
31 const unsigned char *bufin
;
33 unsigned char *bufout
;
36 /* Strip leading whitespace. */
38 while (*bufcoded
== ' ' || *bufcoded
== '\t')
41 /* Figure out how many characters are in the input buffer.
42 * Allocate this many from the per-transaction pool for the result.
44 bufin
= (const unsigned char *) bufcoded
;
45 while (pr2six
[*(bufin
++)] <= 63);
46 nprbytes
= (const char *) bufin
- bufcoded
- 1;
47 nbytesdecoded
= ((nprbytes
+ 3) / 4) * 3;
49 bufplain
= xmalloc(nbytesdecoded
+ 1);
50 bufout
= (unsigned char *) bufplain
;
51 bufin
= (const unsigned char *) bufcoded
;
53 while (nprbytes
> 0) {
55 (unsigned char) (pr2six
[*bufin
] << 2 | pr2six
[bufin
[1]] >> 4);
57 (unsigned char) (pr2six
[bufin
[1]] << 4 | pr2six
[bufin
[2]] >> 2);
59 (unsigned char) (pr2six
[bufin
[2]] << 6 | pr2six
[bufin
[3]]);
65 if (pr2six
[bufin
[-2]] > 63)
70 bufplain
[nbytesdecoded
] = '\0';