summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJoe Orton <joe@manyfish.uk>2020-12-06 10:24:01 +0000
committerJoe Orton <joe@manyfish.uk>2020-12-06 10:24:01 +0000
commitbfbe0802736d9519b8d30a5cf198b1d12f685ddd (patch)
treefb31a221aecc76cbe02ccb002393e99c41965154
parenta67a33cf4a5733f04b34646acb9af7b6635ef8b3 (diff)
downloadneon-git-bfbe0802736d9519b8d30a5cf198b1d12f685ddd.tar.gz
* src/ne_string.c (ne__strhash2hex, ne_strparam): Use fast hex lookup
array rather than NE_HEX2ASC.
-rw-r--r--src/ne_string.c15
1 files changed, 11 insertions, 4 deletions
diff --git a/src/ne_string.c b/src/ne_string.c
index 30bb468..801f79e 100644
--- a/src/ne_string.c
+++ b/src/ne_string.c
@@ -656,6 +656,13 @@ char *ne_vstrhash(unsigned int flags, va_list ap)
}
#endif
+static const char hexmap[16] = {
+ '0', '1', '2', '3', '4', '5', '6', '7',
+ '8', '9', 'a', 'b', 'c', 'd', 'e', 'f'
+};
+
+#define HEX2ASC(a) (hexmap[(unsigned)a & 0xf])
+
char *ne__strhash2hex(const unsigned char *digest, size_t len,
unsigned int flags)
{
@@ -678,8 +685,8 @@ char *ne__strhash2hex(const unsigned char *digest, size_t len,
p = rv = ne_malloc(len * step + 1);
for (n = 0; n < len; n++) {
- *p++ = NE_HEX2ASC(digest[n] >> 4);
- *p++ = NE_HEX2ASC(digest[n] & 0x0f);
+ *p++ = HEX2ASC(digest[n] >> 4);
+ *p++ = HEX2ASC(digest[n] & 0x0f);
if (sep) *p++ = sep;
}
@@ -748,8 +755,8 @@ char *ne_strparam(const char *charset, const char *lang,
}
else {
*rp++ = '%';
- *rp++ = NE_HEX2ASC(*p >> 4);
- *rp++ = NE_HEX2ASC(*p & 0x0f);
+ *rp++ = HEX2ASC(*p >> 4);
+ *rp++ = HEX2ASC(*p & 0x0f);
}
}