r996 - in trunk/varnish-cache: include lib/libvarnishapi

phk at projects.linpro.no phk at projects.linpro.no
Fri Sep 15 21:25:06 CEST 2006


Author: phk
Date: 2006-09-15 21:25:06 +0200 (Fri, 15 Sep 2006)
New Revision: 996

Added:
   trunk/varnish-cache/lib/libvarnishapi/base64.c
Modified:
   trunk/varnish-cache/include/varnishapi.h
   trunk/varnish-cache/lib/libvarnishapi/Makefile.am
Log:
Add a base64 decoder.



Modified: trunk/varnish-cache/include/varnishapi.h
===================================================================
--- trunk/varnish-cache/include/varnishapi.h	2006-09-15 16:18:27 UTC (rev 995)
+++ trunk/varnish-cache/include/varnishapi.h	2006-09-15 19:25:06 UTC (rev 996)
@@ -7,6 +7,10 @@
 
 #define V_DEAD __attribute__ ((noreturn))
 
+/* base64.c */
+void base64_init(void);
+int base64_decode(char *d, unsigned dlen, const char *s);
+
 /* shmlog.c */
 typedef int vsl_handler(void *priv, unsigned tag, unsigned fd, unsigned len, unsigned spec, const char *ptr);
 #define VSL_S_CLIENT	(1 << 0)

Modified: trunk/varnish-cache/lib/libvarnishapi/Makefile.am
===================================================================
--- trunk/varnish-cache/lib/libvarnishapi/Makefile.am	2006-09-15 16:18:27 UTC (rev 995)
+++ trunk/varnish-cache/lib/libvarnishapi/Makefile.am	2006-09-15 19:25:06 UTC (rev 996)
@@ -5,6 +5,7 @@
 lib_LTLIBRARIES = libvarnishapi.la
 
 libvarnishapi_la_SOURCES = \
+	base64.c \
 	shmlog.c
 
 libvarnishapi_la_CFLAGS = -include config.h

Added: trunk/varnish-cache/lib/libvarnishapi/base64.c
===================================================================
--- trunk/varnish-cache/lib/libvarnishapi/base64.c	2006-09-15 16:18:27 UTC (rev 995)
+++ trunk/varnish-cache/lib/libvarnishapi/base64.c	2006-09-15 19:25:06 UTC (rev 996)
@@ -0,0 +1,78 @@
+/* $Id$ */
+
+static const char *b64 =
+    "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/";
+
+static char i64[256];
+
+void
+base64_init(void)
+{
+	int i;
+	const char *p;
+
+	for (i = 0; i < 256; i++)
+		i64[i] = -1;
+	for (p = b64, i = 0; *p; p++, i++)
+		i64[*p] = i;
+	i64['='] = 0;
+}
+
+int
+base64_decode(char *d, unsigned dlen, const char *s)
+{
+	unsigned u, v, l;
+	int i;
+
+	l = 0;
+	while (*s) {
+		for (v = 0; v < 4; v++) {
+			if (!*s)
+				break;
+			i = i64[*s++];
+			if (i < 0)
+				return (-1);
+			u <<= 6;
+			u |= i;
+		}
+		for (v = 0; v < 3; v++) {
+			if (l >= dlen - 1)
+				return (-1);
+			*d = (u >> 16) & 0xff;
+			u <<= 8;
+			l++;
+			d++;
+		}
+	}
+	printf("\n");
+	*d = '\0';
+	return (0);
+}
+
+#ifdef TEST_DRIVER
+#include <stdio.h>
+
+const char *test1 =
+"TWFuIGlzIGRpc3Rpbmd1aXNoZWQsIG5vdCBvbmx5IGJ5IGhpcyByZWFzb24sIGJ1dCBieSB0aGlz"
+"IHNpbmd1bGFyIHBhc3Npb24gZnJvbSBvdGhlciBhbmltYWxzLCB3aGljaCBpcyBhIGx1c3Qgb2Yg"
+"dGhlIG1pbmQsIHRoYXQgYnkgYSBwZXJzZXZlcmFuY2Ugb2YgZGVsaWdodCBpbiB0aGUgY29udGlu"
+"dWVkIGFuZCBpbmRlZmF0aWdhYmxlIGdlbmVyYXRpb24gb2Yga25vd2xlZGdlLCBleGNlZWRzIHRo"
+"ZSBzaG9ydCB2ZWhlbWVuY2Ugb2YgYW55IGNhcm5hbCBwbGVhc3VyZS4=";
+
+int
+main(int argc, char **argv)
+{
+	int i;
+	char buf[BUFSIZ];
+	unsigned l;
+
+	(void)argc;
+	(void)argv;
+
+	base64_init();
+	l = sizeof buf;
+	base64_decode(buf, &l, test1);
+	printf("%s\n", buf);
+	return (0);
+}
+#endif




More information about the varnish-commit mailing list