[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[libmicrohttpd2] 09/21: mhd_str: added 8 bit -> 2 xdigits one-pass encod
From: |
Admin |
Subject: |
[libmicrohttpd2] 09/21: mhd_str: added 8 bit -> 2 xdigits one-pass encoding |
Date: |
Fri, 13 Jun 2025 23:38:17 +0200 |
This is an automated email from the git hooks/post-receive script.
karlson2k pushed a commit to branch master
in repository libmicrohttpd2.
commit ca74fb154463188ecbbfd59b9d15ebd770edd30a
Author: Evgeny Grin (Karlson2k) <k2k@drgrin.dev>
AuthorDate: Thu Jun 12 21:46:39 2025 +0200
mhd_str: added 8 bit -> 2 xdigits one-pass encoding
Can be backported.
---
src/mhd2/mhd_str.c | 294 +++++++++++++++++++++++++++++++++++++++++++++++++++++
1 file changed, 294 insertions(+)
diff --git a/src/mhd2/mhd_str.c b/src/mhd2/mhd_str.c
index f15bb78..8e72508 100644
--- a/src/mhd2/mhd_str.c
+++ b/src/mhd2/mhd_str.c
@@ -513,6 +513,294 @@ valuetoxdigit (unsigned int v)
}
+#if ! defined(MHD_FAVOR_SMALL_CODE)
+/**
+ * Convert 8 bit value to two US-ASCII hexadecimal digits.
+ *
+ * @param v the value to convert
+ * @return pointer to char[2] with two hexadecimal digits
+ */
+MHD_static_inline_ MHD_FN_CONST_ MHD_FN_RETURNS_NONNULL_ const char*
+uint8totwoxdigits (uint8_t v)
+{
+ static const char map_uint8_to_two_xdigits[][2] =
+ { { '0', '0' },
+ { '0', '1' },
+ { '0', '2' },
+ { '0', '3' },
+ { '0', '4' },
+ { '0', '5' },
+ { '0', '6' },
+ { '0', '7' },
+ { '0', '8' },
+ { '0', '9' },
+ { '0', 'a' },
+ { '0', 'b' },
+ { '0', 'c' },
+ { '0', 'd' },
+ { '0', 'e' },
+ { '0', 'f' },
+ { '1', '0' },
+ { '1', '1' },
+ { '1', '2' },
+ { '1', '3' },
+ { '1', '4' },
+ { '1', '5' },
+ { '1', '6' },
+ { '1', '7' },
+ { '1', '8' },
+ { '1', '9' },
+ { '1', 'a' },
+ { '1', 'b' },
+ { '1', 'c' },
+ { '1', 'd' },
+ { '1', 'e' },
+ { '1', 'f' },
+ { '2', '0' },
+ { '2', '1' },
+ { '2', '2' },
+ { '2', '3' },
+ { '2', '4' },
+ { '2', '5' },
+ { '2', '6' },
+ { '2', '7' },
+ { '2', '8' },
+ { '2', '9' },
+ { '2', 'a' },
+ { '2', 'b' },
+ { '2', 'c' },
+ { '2', 'd' },
+ { '2', 'e' },
+ { '2', 'f' },
+ { '3', '0' },
+ { '3', '1' },
+ { '3', '2' },
+ { '3', '3' },
+ { '3', '4' },
+ { '3', '5' },
+ { '3', '6' },
+ { '3', '7' },
+ { '3', '8' },
+ { '3', '9' },
+ { '3', 'a' },
+ { '3', 'b' },
+ { '3', 'c' },
+ { '3', 'd' },
+ { '3', 'e' },
+ { '3', 'f' },
+ { '4', '0' },
+ { '4', '1' },
+ { '4', '2' },
+ { '4', '3' },
+ { '4', '4' },
+ { '4', '5' },
+ { '4', '6' },
+ { '4', '7' },
+ { '4', '8' },
+ { '4', '9' },
+ { '4', 'a' },
+ { '4', 'b' },
+ { '4', 'c' },
+ { '4', 'd' },
+ { '4', 'e' },
+ { '4', 'f' },
+ { '5', '0' },
+ { '5', '1' },
+ { '5', '2' },
+ { '5', '3' },
+ { '5', '4' },
+ { '5', '5' },
+ { '5', '6' },
+ { '5', '7' },
+ { '5', '8' },
+ { '5', '9' },
+ { '5', 'a' },
+ { '5', 'b' },
+ { '5', 'c' },
+ { '5', 'd' },
+ { '5', 'e' },
+ { '5', 'f' },
+ { '6', '0' },
+ { '6', '1' },
+ { '6', '2' },
+ { '6', '3' },
+ { '6', '4' },
+ { '6', '5' },
+ { '6', '6' },
+ { '6', '7' },
+ { '6', '8' },
+ { '6', '9' },
+ { '6', 'a' },
+ { '6', 'b' },
+ { '6', 'c' },
+ { '6', 'd' },
+ { '6', 'e' },
+ { '6', 'f' },
+ { '7', '0' },
+ { '7', '1' },
+ { '7', '2' },
+ { '7', '3' },
+ { '7', '4' },
+ { '7', '5' },
+ { '7', '6' },
+ { '7', '7' },
+ { '7', '8' },
+ { '7', '9' },
+ { '7', 'a' },
+ { '7', 'b' },
+ { '7', 'c' },
+ { '7', 'd' },
+ { '7', 'e' },
+ { '7', 'f' },
+ { '8', '0' },
+ { '8', '1' },
+ { '8', '2' },
+ { '8', '3' },
+ { '8', '4' },
+ { '8', '5' },
+ { '8', '6' },
+ { '8', '7' },
+ { '8', '8' },
+ { '8', '9' },
+ { '8', 'a' },
+ { '8', 'b' },
+ { '8', 'c' },
+ { '8', 'd' },
+ { '8', 'e' },
+ { '8', 'f' },
+ { '9', '0' },
+ { '9', '1' },
+ { '9', '2' },
+ { '9', '3' },
+ { '9', '4' },
+ { '9', '5' },
+ { '9', '6' },
+ { '9', '7' },
+ { '9', '8' },
+ { '9', '9' },
+ { '9', 'a' },
+ { '9', 'b' },
+ { '9', 'c' },
+ { '9', 'd' },
+ { '9', 'e' },
+ { '9', 'f' },
+ { 'a', '0' },
+ { 'a', '1' },
+ { 'a', '2' },
+ { 'a', '3' },
+ { 'a', '4' },
+ { 'a', '5' },
+ { 'a', '6' },
+ { 'a', '7' },
+ { 'a', '8' },
+ { 'a', '9' },
+ { 'a', 'a' },
+ { 'a', 'b' },
+ { 'a', 'c' },
+ { 'a', 'd' },
+ { 'a', 'e' },
+ { 'a', 'f' },
+ { 'b', '0' },
+ { 'b', '1' },
+ { 'b', '2' },
+ { 'b', '3' },
+ { 'b', '4' },
+ { 'b', '5' },
+ { 'b', '6' },
+ { 'b', '7' },
+ { 'b', '8' },
+ { 'b', '9' },
+ { 'b', 'a' },
+ { 'b', 'b' },
+ { 'b', 'c' },
+ { 'b', 'd' },
+ { 'b', 'e' },
+ { 'b', 'f' },
+ { 'c', '0' },
+ { 'c', '1' },
+ { 'c', '2' },
+ { 'c', '3' },
+ { 'c', '4' },
+ { 'c', '5' },
+ { 'c', '6' },
+ { 'c', '7' },
+ { 'c', '8' },
+ { 'c', '9' },
+ { 'c', 'a' },
+ { 'c', 'b' },
+ { 'c', 'c' },
+ { 'c', 'd' },
+ { 'c', 'e' },
+ { 'c', 'f' },
+ { 'd', '0' },
+ { 'd', '1' },
+ { 'd', '2' },
+ { 'd', '3' },
+ { 'd', '4' },
+ { 'd', '5' },
+ { 'd', '6' },
+ { 'd', '7' },
+ { 'd', '8' },
+ { 'd', '9' },
+ { 'd', 'a' },
+ { 'd', 'b' },
+ { 'd', 'c' },
+ { 'd', 'd' },
+ { 'd', 'e' },
+ { 'd', 'f' },
+ { 'e', '0' },
+ { 'e', '1' },
+ { 'e', '2' },
+ { 'e', '3' },
+ { 'e', '4' },
+ { 'e', '5' },
+ { 'e', '6' },
+ { 'e', '7' },
+ { 'e', '8' },
+ { 'e', '9' },
+ { 'e', 'a' },
+ { 'e', 'b' },
+ { 'e', 'c' },
+ { 'e', 'd' },
+ { 'e', 'e' },
+ { 'e', 'f' },
+ { 'f', '0' },
+ { 'f', '1' },
+ { 'f', '2' },
+ { 'f', '3' },
+ { 'f', '4' },
+ { 'f', '5' },
+ { 'f', '6' },
+ { 'f', '7' },
+ { 'f', '8' },
+ { 'f', '9' },
+ { 'f', 'a' },
+ { 'f', 'b' },
+ { 'f', 'c' },
+ { 'f', 'd' },
+ { 'f', 'e' },
+ { 'f', 'f' }
+#ifndef NDEBUG
+ ,
+ { 0, 0 }
+#endif /* ! NDEBUG */
+ };
+
+ mhd_assert (257u == \
+ (sizeof(map_uint8_to_two_xdigits) \
+ / sizeof(map_uint8_to_two_xdigits[0])));
+
+ return map_uint8_to_two_xdigits[v];
+ /**
+ * Indicates that function uint8totwoxdigits() is available
+ */
+#define mhd_HAVE_UINT8TOTWOXDIGITS 1
+}
+
+
+#endif /* ! MHD_FAVOR_SMALL_CODE */
+
+
/**
* Caseless compare two characters.
*
@@ -1540,8 +1828,14 @@ mhd_bin_to_hex (const void *restrict bin,
for (i = 0; i < size; ++i)
{
const uint8_t b = ((const uint8_t *) bin)[i];
+#ifdef mhd_HAVE_UINT8TOTWOXDIGITS
+ const char *two_xdigits = uint8totwoxdigits (b);
+ hex[i * 2] = two_xdigits[0];
+ hex[i * 2 + 1] = two_xdigits[1];
+#else /* ! mhd_HAVE_UINT8TOTWOXDIGITS */
hex[i * 2] = valuetoxdigit (b >> 4);
hex[i * 2 + 1] = valuetoxdigit (b & 0x0Fu);
+#endif /* ! mhd_HAVE_UINT8TOTWOXDIGITS */
}
return i * 2;
}
--
To stop receiving notification emails like this one, please contact
gnunet@gnunet.org.
- [libmicrohttpd2] branch master updated (cdd4c1f -> a71f9db), Admin, 2025/06/13
- [libmicrohttpd2] 09/21: mhd_str: added 8 bit -> 2 xdigits one-pass encoding,
Admin <=
- [libmicrohttpd2] 11/21: mhd_str: optimised caseless comparisons and case transformations, Admin, 2025/06/13
- [libmicrohttpd2] 13/21: parse_http_std_method(): optimised, Admin, 2025/06/13
- [libmicrohttpd2] 21/21: perf_replies: added response sizes 8 MiB and 101 MiB, Admin, 2025/06/13
- [libmicrohttpd2] 02/21: bootstrap: make sure that pre-commit hook really used, Admin, 2025/06/13
- [libmicrohttpd2] 01/21: conn_data_send.c: fixed large sending, added some asserts, Admin, 2025/06/13
- [libmicrohttpd2] 04/21: xdigittovalue(): optimised., Admin, 2025/06/13
- [libmicrohttpd2] 18/21: Renamed test_postprocessor -> test_postparser to match API naming, Admin, 2025/06/13
- [libmicrohttpd2] 16/21: configure: minor check improvement, Admin, 2025/06/13
- [libmicrohttpd2] 12/21: mhd_locks: added W32 implementation based on SRW locks (and minor improvements), Admin, 2025/06/13
- [libmicrohttpd2] 10/21: configure: added release build linker flags, Admin, 2025/06/13