From 4bee24a5cf254a418660db56e4e67e105937565e Mon Sep 17 00:00:00 2001 From: divverent Date: Thu, 25 Nov 2010 19:51:46 +0000 Subject: [PATCH] move base64 to common code git-svn-id: svn://svn.icculus.org/twilight/trunk/darkplaces@10631 d7cf8633-e32d-0410-b094-e92efae38249 --- common.c | 31 +++++++++++++++++++++++++++++++ common.h | 2 ++ crypto.c | 31 ------------------------------- 3 files changed, 33 insertions(+), 31 deletions(-) diff --git a/common.c b/common.c index 71c059ac..11a350bf 100644 --- a/common.c +++ b/common.c @@ -2260,3 +2260,34 @@ char **XPM_DecodeString(const char *in) return tokens; } + +static const char base64[] = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/"; +static void base64_3to4(const unsigned char *in, unsigned char *out, int bytes) +{ + unsigned char i0 = (bytes > 0) ? in[0] : 0; + unsigned char i1 = (bytes > 1) ? in[1] : 0; + unsigned char i2 = (bytes > 2) ? in[2] : 0; + unsigned char o0 = base64[i0 >> 2]; + unsigned char o1 = base64[((i0 << 4) | (i1 >> 4)) & 077]; + unsigned char o2 = base64[((i1 << 2) | (i2 >> 6)) & 077]; + unsigned char o3 = base64[i2 & 077]; + out[0] = (bytes > 0) ? o0 : '?'; + out[1] = (bytes > 0) ? o1 : '?'; + out[2] = (bytes > 1) ? o2 : '='; + out[3] = (bytes > 2) ? o3 : '='; +} + +size_t base64_encode(unsigned char *buf, size_t buflen, size_t outbuflen) +{ + size_t blocks, i; + // expand the out-buffer + blocks = (buflen + 2) / 3; + if(blocks*4 > outbuflen) + return 0; + for(i = blocks; i > 0; ) + { + --i; + base64_3to4(buf + 3*i, buf + 4*i, buflen - 3*i); + } + return blocks * 4; +} diff --git a/common.h b/common.h index a5565ac7..f3516c5d 100644 --- a/common.h +++ b/common.h @@ -359,5 +359,7 @@ void FindFraction(double val, int *num, int *denom, int denomMax); // decodes XPM file to XPM array (as if #include'd) char **XPM_DecodeString(const char *in); +size_t base64_encode(unsigned char *buf, size_t buflen, size_t outbuflen); + #endif diff --git a/crypto.c b/crypto.c index fa2ea67c..c261d490 100644 --- a/crypto.c +++ b/crypto.c @@ -354,37 +354,6 @@ static size_t Crypto_LoadFile(const char *path, char *buf, size_t nmax) return (size_t) n; } -static const char base64[] = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/"; -static void base64_3to4(const unsigned char *in, unsigned char *out, int bytes) -{ - unsigned char i0 = (bytes > 0) ? in[0] : 0; - unsigned char i1 = (bytes > 1) ? in[1] : 0; - unsigned char i2 = (bytes > 2) ? in[2] : 0; - unsigned char o0 = base64[i0 >> 2]; - unsigned char o1 = base64[((i0 << 4) | (i1 >> 4)) & 077]; - unsigned char o2 = base64[((i1 << 2) | (i2 >> 6)) & 077]; - unsigned char o3 = base64[i2 & 077]; - out[0] = (bytes > 0) ? o0 : '?'; - out[1] = (bytes > 0) ? o1 : '?'; - out[2] = (bytes > 1) ? o2 : '='; - out[3] = (bytes > 2) ? o3 : '='; -} - -size_t base64_encode(unsigned char *buf, size_t buflen, size_t outbuflen) -{ - size_t blocks, i; - // expand the out-buffer - blocks = (buflen + 2) / 3; - if(blocks*4 > outbuflen) - return 0; - for(i = blocks; i > 0; ) - { - --i; - base64_3to4(buf + 3*i, buf + 4*i, buflen - 3*i); - } - return blocks * 4; -} - static qboolean PutWithNul(char **data, size_t *len, const char *str) { // invariant: data points to insertion point -- 2.39.2