gnunet-svn
[Top][All Lists]
Advanced

[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.



reply via email to

[Prev in Thread] Current Thread [Next in Thread]