Fixed base64 encoding.

pull/2/merge
Hoa V. DINH 2014-01-30 23:44:08 -08:00
parent bc9b025b3d
commit cb5b3a804c
1 changed files with 10 additions and 9 deletions

View File

@ -60,6 +60,7 @@ char * encode_base64(const char * in, int len)
char * output, * tmp;
unsigned char oval;
int out_len;
const unsigned char * uin = (const unsigned char *) in;
out_len = ((len + 2) / 3 * 4) + 1;
@ -72,19 +73,19 @@ char * encode_base64(const char * in, int len)
tmp = output;
while (len >= 3) {
*tmp++ = basis_64[in[0] >> 2];
*tmp++ = basis_64[((in[0] << 4) & 0x30) | (in[1] >> 4)];
*tmp++ = basis_64[((in[1] << 2) & 0x3c) | (in[2] >> 6)];
*tmp++ = basis_64[in[2] & 0x3f];
in += 3;
*tmp++ = basis_64[uin[0] >> 2];
*tmp++ = basis_64[((uin[0] << 4) & 0x30) | (uin[1] >> 4)];
*tmp++ = basis_64[((uin[1] << 2) & 0x3c) | (uin[2] >> 6)];
*tmp++ = basis_64[uin[2] & 0x3f];
uin += 3;
len -= 3;
}
if (len > 0) {
*tmp++ = basis_64[in[0] >> 2];
oval = (in[0] << 4) & 0x30;
if (len > 1) oval |= in[1] >> 4;
*tmp++ = basis_64[uin[0] >> 2];
oval = (uin[0] << 4) & 0x30;
if (len > 1) oval |= uin[1] >> 4;
*tmp++ = basis_64[oval];
*tmp++ = (len < 2) ? '=' : basis_64[(in[1] << 2) & 0x3c];
*tmp++ = (len < 2) ? '=' : basis_64[(uin[1] << 2) & 0x3c];
*tmp++ = '=';
}