2 * Claws Mail -- a GTK based, lightweight, and fast e-mail client
3 * Copyright (C) 1999,2000 Hiroyuki Yamamoto
5 * This program is free software; you can redistribute it and/or modify
6 * it under the terms of the GNU General Public License as published by
7 * the Free Software Foundation; either version 3 of the License, or
8 * (at your option) any later version.
10 * This program is distributed in the hope that it will be useful,
11 * but WITHOUT ANY WARRANTY; without even the implied warranty of
12 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13 * GNU General Public License for more details.
15 * You should have received a copy of the GNU General Public License
16 * along with this program. If not, see <http://www.gnu.org/licenses/>.
24 #define UUDECODE(c) (c=='`' ? 0 : c - ' ')
25 #define N64(i) (i & ~63)
27 const char uudigit
[64] =
29 '`', '!', '"', '#', '$', '%', '&', '\'',
30 '(', ')', '*', '+', ',', '-', '.', '/',
31 '0', '1', '2', '3', '4', '5', '6', '7',
32 '8', '9', ':', ';', '<', '=', '>', '?',
33 '@', 'A', 'B', 'C', 'D', 'E', 'F', 'G',
34 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O',
35 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W',
36 'X', 'Y', 'Z', '[', '\\', ']', '^', '_'
39 int fromuutobits(char *out
, const char *in
)
41 int len
, outlen
, inlen
;
42 register unsigned char digit1
, digit2
;
44 outlen
= UUDECODE(in
[0]);
46 if(outlen
< 0 || outlen
> 45)
50 inlen
= (outlen
* 4 + 2) / 3;
53 for( ; inlen
>0; inlen
-=4) {
54 digit1
= UUDECODE(in
[0]);
55 if (N64(digit1
)) return -1;
56 digit2
= UUDECODE(in
[1]);
57 if (N64(digit2
)) return -1;
58 out
[len
++] = (digit1
<< 2) | (digit2
>> 4);
60 digit1
= UUDECODE(in
[2]);
61 if (N64(digit1
)) return -1;
62 out
[len
++] = (digit2
<< 4) | (digit1
>> 2);
64 digit2
= UUDECODE(in
[3]);
65 if (N64(digit2
)) return -1;
66 out
[len
++] = (digit1
<< 6) | digit2
;
72 return len
== outlen
? len
: -3;