tbase64_digits: reduce scope, implicit zero, +1 size - st - [fork] customized b… | |
git clone git://src.adamsgaard.dk/st | |
Log | |
Files | |
Refs | |
README | |
LICENSE | |
--- | |
commit ef0551932fb162f907b40185d2f48c3b497708ee | |
parent af3bb68add1c40d19d0dee382009e21b0870a38f | |
Author: NRK <[email protected]> | |
Date: Fri, 18 Mar 2022 17:03:34 +0600 | |
base64_digits: reduce scope, implicit zero, +1 size | |
tthe array is not accessed outside of base64dec() so it makes sense to | |
limit it's scope to the related function. the static-storage duration of | |
tthe array is kept intact. | |
tthis also removes unnecessary explicit zeroing from the start and end of | |
tthe array. anything that wasn't explicitly zero-ed will now be | |
implicitly zero-ed instead. | |
tthe validity of the new array can be easily confirmed via running this | |
ttrivial loop: | |
for (int i = 0; i < 255; ++i) | |
assert(base64_digits[i] == base64_digits_old[i]); | |
lastly, as pointed out by Roberto, the array needs to have 256 elements | |
in order to able access it as any unsigned char as an index; the | |
previous array had 255. | |
however, this array will only be accessed at indexes which are | |
isprint() || '=' (see `base64dec_getc()`), so reducing the size of the | |
array to the highest printable ascii char (127 AFAIK) + 1 might also be | |
a valid strategy. | |
Diffstat: | |
M st.c | 22 +++++++--------------- | |
1 file changed, 7 insertions(+), 15 deletions(-) | |
--- | |
diff --git a/st.c b/st.c | |
t@@ -349,21 +349,6 @@ utf8validate(Rune *u, size_t i) | |
return i; | |
} | |
-static const char base64_digits[] = { | |
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, | |
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 62, 0, 0, 0, | |
- 63, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 0, 0, 0, -1, 0, 0, 0, 0, 1, | |
- 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, | |
- 22, 23, 24, 25, 0, 0, 0, 0, 0, 0, 26, 27, 28, 29, 30, 31, 32, 33, 34, | |
- 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 0, | |
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, | |
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, | |
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, | |
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, | |
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, | |
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 | |
-}; | |
- | |
char | |
base64dec_getc(const char **src) | |
{ | |
t@@ -377,6 +362,13 @@ base64dec(const char *src) | |
{ | |
size_t in_len = strlen(src); | |
char *result, *dst; | |
+ static const char base64_digits[256] = { | |
+ [43] = 62, 0, 0, 0, 63, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, | |
+ 0, 0, 0, -1, 0, 0, 0, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, | |
+ 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 0, 0, 0, 0, | |
+ 0, 0, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, | |
+ 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51 | |
+ }; | |
if (in_len % 4) | |
in_len += 4 - (in_len % 4); |