source: bin/varnishncsa/base64.c @ 8aa1d8

Revision 8aa1d8, 1.5 KB checked in by Poul-Henning Kamp <phk@…>, 3 years ago (diff)

Eliminate nested <*.h> includes from include/*

Sort #includes according to rules which are for me to know and you
to guess.

  • Property mode set to 100644
Line 
1/*
2 * Written by Poul-Henning Kamp <phk@phk.freebsd.dk>
3 *
4 * This file is in the public domain.
5 */
6
7#include "config.h"
8
9#include <sys/types.h>
10
11#include <stdio.h>              // for test-prog
12
13#include "base64.h"
14#include "vapi/vsl.h"
15#include "vapi/vsm.h"
16
17static const char b64[] =
18    "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/";
19
20static char i64[256];
21
22void
23VB64_init(void)
24{
25        int i;
26        const char *p;
27
28        for (i = 0; i < 256; i++)
29                i64[i] = -1;
30        for (p = b64, i = 0; *p; p++, i++)
31                i64[(int)*p] = (char)i;
32        i64['='] = 0;
33}
34
35int
36VB64_decode(char *d, unsigned dlen, const char *s)
37{
38        unsigned u, v, l;
39        int i;
40
41        u = 0;
42        l = 0;
43        while (*s) {
44                for (v = 0; v < 4; v++) {
45                        if (!*s)
46                                break;
47                        i = i64[(int)*s++];
48                        if (i < 0)
49                                return (-1);
50                        u <<= 6;
51                        u |= i;
52                }
53                for (v = 0; v < 3; v++) {
54                        if (l >= dlen - 1)
55                                return (-1);
56                        *d = (u >> 16) & 0xff;
57                        u <<= 8;
58                        l++;
59                        d++;
60                }
61        }
62        *d = '\0';
63        return (0);
64}
65
66#ifdef TEST_DRIVER
67
68const char *test1 =
69"TWFuIGlzIGRpc3Rpbmd1aXNoZWQsIG5vdCBvbmx5IGJ5IGhpcyByZWFzb24sIGJ1dCBieSB0aGlz"
70"IHNpbmd1bGFyIHBhc3Npb24gZnJvbSBvdGhlciBhbmltYWxzLCB3aGljaCBpcyBhIGx1c3Qgb2Yg"
71"dGhlIG1pbmQsIHRoYXQgYnkgYSBwZXJzZXZlcmFuY2Ugb2YgZGVsaWdodCBpbiB0aGUgY29udGlu"
72"dWVkIGFuZCBpbmRlZmF0aWdhYmxlIGdlbmVyYXRpb24gb2Yga25vd2xlZGdlLCBleGNlZWRzIHRo"
73"ZSBzaG9ydCB2ZWhlbWVuY2Ugb2YgYW55IGNhcm5hbCBwbGVhc3VyZS4=";
74
75int
76main(int argc, char **argv)
77{
78        int i;
79        char buf[BUFSIZ];
80        unsigned l;
81
82        (void)argc;
83        (void)argv;
84
85        VB64_init();
86        l = sizeof buf;
87        VB64_decode(buf, &l, test1);
88        printf("%s\n", buf);
89        return (0);
90}
91#endif
Note: See TracBrowser for help on using the repository browser.