Rev 2331 | Show entire file | Regard whitespace | Details | Blame | Last modification | View Log | RSS feed
Rev 2331 | Rev 9637 | ||
---|---|---|---|
Line 63... | Line 63... | ||
63 | ///=============== |
63 | ///=============== |
Line 64... | Line 64... | ||
64 | 64 | ||
65 | int base64_decode(char inp[], char outp[], int len) |
65 | int base64_decode(char inp[], char outp[], int len) |
66 | { |
66 | { |
- | 67 | int i, j, k, n; |
|
67 | int i, j, k; |
68 | char *chr_adr; |
Line -... | Line 69... | ||
- | 69 | char chr[4]; |
|
- | 70 | ||
- | 71 | i = 0; |
|
68 | char chr[4]; |
72 | j = -1; |
69 | 73 | k = 0; |
|
70 | for (i = 0, j=-1, k=0; i < len; i+=4) |
74 | while (i < len) |
71 | { |
75 | { |
- | 76 | for (n = 0; n <= 3; n++) |
|
72 | chr[0] = strchr(base64_table, inp[i]) - base64_table; |
77 | { |
73 | 78 | chr[n] = 0; |
|
74 | chr[1] = strchr(base64_table, inp[i+1]) - base64_table; |
79 | while ((inp[i] <= 0x20) & (i < len)) |
75 | 80 | i++; |
|
76 | if (inp[i+2] == '=') |
81 | if (i < len) |
77 | { |
82 | { |
78 | chr[2] = 0; |
- | |
79 | k++; |
83 | if ((n >= 2) & (inp[i] == '=')) |
80 | } |
- | |
81 | else |
- | |
82 | chr[2] = strchr(base64_table, inp[i+2]) - base64_table; |
- | |
83 | 84 | k++; |
|
- | 85 | else |
|
84 | if (inp[i+3] == '=') |
86 | { |
- | 87 | chr_adr = strchr(base64_table, inp[i]); |
|
- | 88 | if (chr_adr) |
|
85 | { |
89 | chr[n] = chr_adr - base64_table; |
- | 90 | } |
|
86 | chr[3] = 0; |
91 | i++; |
87 | k++; |
- | |
88 | } |
- | |
89 | else |
- | |
90 | chr[3] = strchr(base64_table, inp[i+3]) - base64_table; |
92 | } |
91 | 93 | } |
|
92 | outp[++j] = ((chr[0] << 2) | (chr[1] >> 4)); |
94 | outp[++j] = ((chr[0] << 2) | (chr[1] >> 4)); |
93 | outp[++j] = ((chr[1] << 4) | (chr[2] >> 2)); |
95 | outp[++j] = ((chr[1] << 4) | (chr[2] >> 2)); |