Subversion Repositories Kolibri OS

Rev

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));