~ubuntu-branches/ubuntu/vivid/cctools/vivid

« back to all changes in this revision

Viewing changes to dttools/src/b64_encode.c

  • Committer: Bazaar Package Importer
  • Author(s): Michael Hanke
  • Date: 2011-05-07 09:05:00 UTC
  • Revision ID: james.westby@ubuntu.com-20110507090500-lqpmdtwndor6e7os
Tags: upstream-3.3.2
ImportĀ upstreamĀ versionĀ 3.3.2

Show diffs side-by-side

added added

removed removed

Lines of Context:
 
1
#include "b64_encode.h"
 
2
#include <stdio.h>
 
3
 
 
4
 
 
5
const char b64_table[] = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=";
 
6
 
 
7
int b64_encode(const char* input, int len, char* output, int buf_len) {
 
8
        int i, out_len;
 
9
 
 
10
        out_len = (len/3)*4;
 
11
        if(len%3) out_len += 4;
 
12
        if(buf_len < out_len) return -1;
 
13
 
 
14
        for(i = 0; i < len/3; i++) {
 
15
                output[4*i  ] = b64_table[(input[3*i] >> 2) & 0x3F];
 
16
                output[4*i+1] = b64_table[((input[3*i] << 4) & 0x30) + ((input[3*i+1] >> 4) & 0x0F)];
 
17
                output[4*i+2] = b64_table[((input[3*i+1] << 2) & 0x3C) + ((input[3*i+2] >> 6) & 0x03)];
 
18
                output[4*i+3] = b64_table[input[3*i+2] & 0x3F];
 
19
        }
 
20
 
 
21
        switch(len%3) {
 
22
                case 2:
 
23
                        output[4*i  ] = b64_table[(input[3*i] >> 2) & 0x3F];
 
24
                        output[4*i+1] = b64_table[((input[3*i] << 4) & 0x30) + ((input[3*i+1] >> 4) & 0x0F)];
 
25
                        output[4*i+2] = b64_table[(input[3*i+1] << 2) & 0x3C];
 
26
                        output[4*i+3] = '=';
 
27
                        break;
 
28
                case 1:
 
29
                        output[4*i  ] = b64_table[(input[3*i] >> 2) & 0x3F];
 
30
                        output[4*i+1] = b64_table[(input[3*i] << 4) & 0x30];
 
31
                        output[4*i+2] = '=';
 
32
                        output[4*i+3] = '=';
 
33
                        break;
 
34
                default:
 
35
                        break;
 
36
        }
 
37
 
 
38
        return 0;
 
39
}
 
40
 
 
41