summary refs log tree commit diff
diff options
context:
space:
mode:
-rw-r--r--decode.c16
1 files changed, 13 insertions, 3 deletions
diff --git a/decode.c b/decode.c
index 8578c41..8fd005d 100644
--- a/decode.c
+++ b/decode.c
@@ -86,20 +86,30 @@ static void convertCharset(
 	iconv_close(conv);
 }
 
-static const char Base64[64] = {
+static const uint8_t Base64[64] = {
 	"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/"
 };
+static uint8_t Table64[256];
+
+static uint8_t unbase64(char ch) {
+	if (!Table64[Base64[1]]) {
+		for (size_t i = 0; i < sizeof(Base64); ++i) {
+			Table64[Base64[i]] = i;
+		}
+	}
+	return Table64[(uint8_t)ch];
+}
 
 static void decodeBase64(struct Buffer *dst, const char *src) {
 	while (src[0] && src[1] && src[2] && src[3]) {
-		if (!strchr(Base64, src[0])) {
+		if (!unbase64(src[0]) && src[0] != Base64[0]) {
 			src++;
 			continue;
 		}
 		uint32_t bits = 0;
 		for (int i = 0; i < 4; ++i) {
 			bits <<= 6;
-			bits |= strchr(Base64, src[i]) - Base64;
+			bits |= unbase64(src[i]);
 		}
 		*bufferDest(dst, 1) = bits >> 16;
 		if (src[2] != '=') *bufferDest(dst, 1) = bits >> 8;
der'>2016-09-12Add -o flag to xxJune McEnroe 2016-09-12Add -g option to xxJune McEnroe 2016-09-12Add -c option to xxJune McEnroe 2016-09-12Add .bin/xx.cJune McEnroe 2016-09-08Rename colorscheme to lameJune McEnroe 2016-09-04Simplify colors syntax in zsh promptJune McEnroe 2016-08-29Color rubyStringDelimiter as StringJune McEnroe 2016-08-24Highlight rubyDefine as StructureJune McEnroe 2016-08-23Remove scroll bindings from nvim configJune McEnroe 2016-08-17Highlight Search with black foregroundJune McEnroe 2016-08-15Remove gruvboxJune McEnroe 2016-08-04Remove march from SSH configJune McEnroe 2016-08-01Disable tab indicators in iTermJune McEnroe 2016-07-30Color PreProc DarkGreenJune McEnroe 2016-07-29Color Structure and Typedef in grayJune McEnroe 2016-07-27Color comments DarkBlue and LightBlueJune McEnroe 2016-07-27Color macros in yellowJune McEnroe 2016-07-26Colorscheme colors and schemesJune McEnroe 2016-07-26Add ''subtle'' colorschemeJune McEnroe I'm just trying this out. 2016-07-26Add htoprcJune McEnroe 2016-07-24Add may and refactor ssh configJune McEnroe 2016-07-18Disable cursorlineJune McEnroe 2016-07-18Use hard constrast gruvbox darkJune McEnroe 2016-07-15Remove vim configurationJune McEnroe 2016-07-15Add readline to README configurations listJune McEnroe 2016-07-15Add vendor script to READMEJune McEnroe 2016-07-15Pull latest pathogen and gruvboxJune McEnroe