summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--src/base64.c14
1 files changed, 6 insertions, 8 deletions
diff --git a/src/base64.c b/src/base64.c
index 2326168..65c6061 100644
--- a/src/base64.c
+++ b/src/base64.c
@@ -53,20 +53,18 @@ char *base64encode(const unsigned char *buf, size_t *size)
53 unsigned char input[3]; 53 unsigned char input[3];
54 unsigned int output[4]; 54 unsigned int output[4];
55 while (n < *size) { 55 while (n < *size) {
56 input[0] = buf[n++]; 56 input[0] = buf[n];
57 input[1] = (n < *size) ? buf[n++] : 0; 57 input[1] = (n+1 < *size) ? buf[n+1] : 0;
58 input[2] = (n < *size) ? buf[n++] : 0; 58 input[2] = (n+2 < *size) ? buf[n+2] : 0;
59 output[0] = input[0] >> 2; 59 output[0] = input[0] >> 2;
60 output[1] = ((input[0] & 3) << 4) + (input[1] >> 4); 60 output[1] = ((input[0] & 3) << 4) + (input[1] >> 4);
61 output[2] = ((input[1] & 15) << 2) + (input[2] >> 6); 61 output[2] = ((input[1] & 15) << 2) + (input[2] >> 6);
62 output[3] = input[2] & 63; 62 output[3] = input[2] & 63;
63 outbuf[m++] = base64_str[(int)output[0]]; 63 outbuf[m++] = base64_str[(int)output[0]];
64 outbuf[m++] = base64_str[(int)output[1]]; 64 outbuf[m++] = base64_str[(int)output[1]];
65 outbuf[m++] = base64_str[(int)output[2]]; 65 outbuf[m++] = (n+1 < *size) ? base64_str[(int)output[2]] : base64_pad;
66 outbuf[m++] = base64_str[(int)output[3]]; 66 outbuf[m++] = (n+2 < *size) ? base64_str[(int)output[3]] : base64_pad;
67 } 67 n+=3;
68 while ((m % 4) != 0) {
69 outbuf[m++] = base64_pad;
70 } 68 }
71 outbuf[m] = 0; // 0-termination! 69 outbuf[m] = 0; // 0-termination!
72 *size = m; 70 *size = m;