gnunet-svn
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[libmicrohttpd] 03/04: Added internal MHD_uint8_to_str_pad() function


From: gnunet
Subject: [libmicrohttpd] 03/04: Added internal MHD_uint8_to_str_pad() function
Date: Sun, 01 Aug 2021 20:12:01 +0200

This is an automated email from the git hooks/post-receive script.

karlson2k pushed a commit to branch master
in repository libmicrohttpd.

commit 8933bf8fe152c8663bd33d7df5d328ff04386146
Author: Evgeny Grin (Karlson2k) <k2k@narod.ru>
AuthorDate: Sun Aug 1 18:27:01 2021 +0300

    Added internal MHD_uint8_to_str_pad() function
    
    Function prints decimal numbers padded with zero
---
 src/microhttpd/mhd_str.c  |  47 +++
 src/microhttpd/mhd_str.h  |  22 ++
 src/microhttpd/test_str.c | 907 +++++++++++++++++++++++++++++++++++++++++++++-
 3 files changed, 975 insertions(+), 1 deletion(-)

diff --git a/src/microhttpd/mhd_str.c b/src/microhttpd/mhd_str.c
index b106859d..1c77a46d 100644
--- a/src/microhttpd/mhd_str.c
+++ b/src/microhttpd/mhd_str.c
@@ -1294,3 +1294,50 @@ MHD_uint64_to_str (uint64_t val,
   }
   return 0; /* The buffer is too small */
 }
+
+
+size_t
+MHD_uint8_to_str_pad (uint8_t val,
+                      uint8_t min_digits,
+                      char *buf,
+                      size_t buf_size)
+{
+  size_t pos; /**< the position of the current printed digit */
+  int digit;
+  mhd_assert (3 >= min_digits);
+  if (0 == buf_size)
+    return 0;
+
+  pos = 0;
+  digit = val / 100;
+  if (0 == digit)
+  {
+    if (3 <= min_digits)
+      buf[pos++] = '0';
+  }
+  else
+  {
+    buf[pos++] = '0' + digit;
+    val %= 100;
+    min_digits = 2;
+  }
+
+  if (buf_size <= pos)
+    return 0;
+  digit = val / 10;
+  if (0 == digit)
+  {
+    if (2 <= min_digits)
+      buf[pos++] = '0';
+  }
+  else
+  {
+    buf[pos++] = '0' + digit;
+    val %= 10;
+  }
+
+  if (buf_size <= pos)
+    return 0;
+  buf[pos++] = '0' + val;
+  return pos;
+}
diff --git a/src/microhttpd/mhd_str.h b/src/microhttpd/mhd_str.h
index 9cc4bb19..b21ae256 100644
--- a/src/microhttpd/mhd_str.h
+++ b/src/microhttpd/mhd_str.h
@@ -424,4 +424,26 @@ MHD_uint64_to_str (uint64_t val,
                    size_t buf_size);
 
 
+/**
+ * Convert uint16_t value to decimal US-ASCII string padded with
+ * zeros on the left side.
+ *
+ * @note: result is NOT zero-terminated.
+ * @param val the value to convert
+ * @param min_digits the minimal number of digits to print,
+ *                   output padded with zeros on the left side,
+ *                   'zero' value is interpreted as 'one',
+ *                   valid values are 3, 2, 1, 0
+ * @param buf the buffer to result to
+ * @param buf_size size of the @a buffer
+ * @return number of charters has been put to the @a buf,
+ *         zero if buffer is too small (buffer may be modified).
+ */
+size_t
+MHD_uint8_to_str_pad (uint8_t val,
+                      uint8_t min_digits,
+                      char *buf,
+                      size_t buf_size);
+
+
 #endif /* MHD_STR_H */
diff --git a/src/microhttpd/test_str.c b/src/microhttpd/test_str.c
index a65cb61d..941f8406 100644
--- a/src/microhttpd/test_str.c
+++ b/src/microhttpd/test_str.c
@@ -3685,12 +3685,901 @@ check_strx_from_uint32 (void)
 }
 
 
+static const struct str_with_value duint8_w_values_p1[] = {
+  {D_STR_W_LEN ("0"), 1, 0},
+  {D_STR_W_LEN ("1"), 1, 1},
+  {D_STR_W_LEN ("2"), 1, 2},
+  {D_STR_W_LEN ("3"), 1, 3},
+  {D_STR_W_LEN ("4"), 1, 4},
+  {D_STR_W_LEN ("5"), 1, 5},
+  {D_STR_W_LEN ("6"), 1, 6},
+  {D_STR_W_LEN ("7"), 1, 7},
+  {D_STR_W_LEN ("8"), 1, 8},
+  {D_STR_W_LEN ("9"), 1, 9},
+  {D_STR_W_LEN ("10"), 2, 10},
+  {D_STR_W_LEN ("11"), 2, 11},
+  {D_STR_W_LEN ("12"), 2, 12},
+  {D_STR_W_LEN ("13"), 2, 13},
+  {D_STR_W_LEN ("14"), 2, 14},
+  {D_STR_W_LEN ("15"), 2, 15},
+  {D_STR_W_LEN ("16"), 2, 16},
+  {D_STR_W_LEN ("17"), 2, 17},
+  {D_STR_W_LEN ("18"), 2, 18},
+  {D_STR_W_LEN ("19"), 2, 19},
+  {D_STR_W_LEN ("20"), 2, 20},
+  {D_STR_W_LEN ("21"), 2, 21},
+  {D_STR_W_LEN ("22"), 2, 22},
+  {D_STR_W_LEN ("23"), 2, 23},
+  {D_STR_W_LEN ("24"), 2, 24},
+  {D_STR_W_LEN ("25"), 2, 25},
+  {D_STR_W_LEN ("26"), 2, 26},
+  {D_STR_W_LEN ("27"), 2, 27},
+  {D_STR_W_LEN ("28"), 2, 28},
+  {D_STR_W_LEN ("29"), 2, 29},
+  {D_STR_W_LEN ("30"), 2, 30},
+  {D_STR_W_LEN ("31"), 2, 31},
+  {D_STR_W_LEN ("32"), 2, 32},
+  {D_STR_W_LEN ("33"), 2, 33},
+  {D_STR_W_LEN ("34"), 2, 34},
+  {D_STR_W_LEN ("35"), 2, 35},
+  {D_STR_W_LEN ("36"), 2, 36},
+  {D_STR_W_LEN ("37"), 2, 37},
+  {D_STR_W_LEN ("38"), 2, 38},
+  {D_STR_W_LEN ("39"), 2, 39},
+  {D_STR_W_LEN ("40"), 2, 40},
+  {D_STR_W_LEN ("41"), 2, 41},
+  {D_STR_W_LEN ("42"), 2, 42},
+  {D_STR_W_LEN ("43"), 2, 43},
+  {D_STR_W_LEN ("44"), 2, 44},
+  {D_STR_W_LEN ("45"), 2, 45},
+  {D_STR_W_LEN ("46"), 2, 46},
+  {D_STR_W_LEN ("47"), 2, 47},
+  {D_STR_W_LEN ("48"), 2, 48},
+  {D_STR_W_LEN ("49"), 2, 49},
+  {D_STR_W_LEN ("50"), 2, 50},
+  {D_STR_W_LEN ("51"), 2, 51},
+  {D_STR_W_LEN ("52"), 2, 52},
+  {D_STR_W_LEN ("53"), 2, 53},
+  {D_STR_W_LEN ("54"), 2, 54},
+  {D_STR_W_LEN ("55"), 2, 55},
+  {D_STR_W_LEN ("56"), 2, 56},
+  {D_STR_W_LEN ("57"), 2, 57},
+  {D_STR_W_LEN ("58"), 2, 58},
+  {D_STR_W_LEN ("59"), 2, 59},
+  {D_STR_W_LEN ("60"), 2, 60},
+  {D_STR_W_LEN ("61"), 2, 61},
+  {D_STR_W_LEN ("62"), 2, 62},
+  {D_STR_W_LEN ("63"), 2, 63},
+  {D_STR_W_LEN ("64"), 2, 64},
+  {D_STR_W_LEN ("65"), 2, 65},
+  {D_STR_W_LEN ("66"), 2, 66},
+  {D_STR_W_LEN ("67"), 2, 67},
+  {D_STR_W_LEN ("68"), 2, 68},
+  {D_STR_W_LEN ("69"), 2, 69},
+  {D_STR_W_LEN ("70"), 2, 70},
+  {D_STR_W_LEN ("71"), 2, 71},
+  {D_STR_W_LEN ("72"), 2, 72},
+  {D_STR_W_LEN ("73"), 2, 73},
+  {D_STR_W_LEN ("74"), 2, 74},
+  {D_STR_W_LEN ("75"), 2, 75},
+  {D_STR_W_LEN ("76"), 2, 76},
+  {D_STR_W_LEN ("77"), 2, 77},
+  {D_STR_W_LEN ("78"), 2, 78},
+  {D_STR_W_LEN ("79"), 2, 79},
+  {D_STR_W_LEN ("80"), 2, 80},
+  {D_STR_W_LEN ("81"), 2, 81},
+  {D_STR_W_LEN ("82"), 2, 82},
+  {D_STR_W_LEN ("83"), 2, 83},
+  {D_STR_W_LEN ("84"), 2, 84},
+  {D_STR_W_LEN ("85"), 2, 85},
+  {D_STR_W_LEN ("86"), 2, 86},
+  {D_STR_W_LEN ("87"), 2, 87},
+  {D_STR_W_LEN ("88"), 2, 88},
+  {D_STR_W_LEN ("89"), 2, 89},
+  {D_STR_W_LEN ("90"), 2, 90},
+  {D_STR_W_LEN ("91"), 2, 91},
+  {D_STR_W_LEN ("92"), 2, 92},
+  {D_STR_W_LEN ("93"), 2, 93},
+  {D_STR_W_LEN ("94"), 2, 94},
+  {D_STR_W_LEN ("95"), 2, 95},
+  {D_STR_W_LEN ("96"), 2, 96},
+  {D_STR_W_LEN ("97"), 2, 97},
+  {D_STR_W_LEN ("98"), 2, 98},
+  {D_STR_W_LEN ("99"), 2, 99},
+  {D_STR_W_LEN ("100"), 3, 100},
+  {D_STR_W_LEN ("101"), 3, 101},
+  {D_STR_W_LEN ("102"), 3, 102},
+  {D_STR_W_LEN ("103"), 3, 103},
+  {D_STR_W_LEN ("104"), 3, 104},
+  {D_STR_W_LEN ("105"), 3, 105},
+  {D_STR_W_LEN ("106"), 3, 106},
+  {D_STR_W_LEN ("107"), 3, 107},
+  {D_STR_W_LEN ("108"), 3, 108},
+  {D_STR_W_LEN ("109"), 3, 109},
+  {D_STR_W_LEN ("110"), 3, 110},
+  {D_STR_W_LEN ("111"), 3, 111},
+  {D_STR_W_LEN ("112"), 3, 112},
+  {D_STR_W_LEN ("113"), 3, 113},
+  {D_STR_W_LEN ("114"), 3, 114},
+  {D_STR_W_LEN ("115"), 3, 115},
+  {D_STR_W_LEN ("116"), 3, 116},
+  {D_STR_W_LEN ("117"), 3, 117},
+  {D_STR_W_LEN ("118"), 3, 118},
+  {D_STR_W_LEN ("119"), 3, 119},
+  {D_STR_W_LEN ("120"), 3, 120},
+  {D_STR_W_LEN ("121"), 3, 121},
+  {D_STR_W_LEN ("122"), 3, 122},
+  {D_STR_W_LEN ("123"), 3, 123},
+  {D_STR_W_LEN ("124"), 3, 124},
+  {D_STR_W_LEN ("125"), 3, 125},
+  {D_STR_W_LEN ("126"), 3, 126},
+  {D_STR_W_LEN ("127"), 3, 127},
+  {D_STR_W_LEN ("128"), 3, 128},
+  {D_STR_W_LEN ("129"), 3, 129},
+  {D_STR_W_LEN ("130"), 3, 130},
+  {D_STR_W_LEN ("131"), 3, 131},
+  {D_STR_W_LEN ("132"), 3, 132},
+  {D_STR_W_LEN ("133"), 3, 133},
+  {D_STR_W_LEN ("134"), 3, 134},
+  {D_STR_W_LEN ("135"), 3, 135},
+  {D_STR_W_LEN ("136"), 3, 136},
+  {D_STR_W_LEN ("137"), 3, 137},
+  {D_STR_W_LEN ("138"), 3, 138},
+  {D_STR_W_LEN ("139"), 3, 139},
+  {D_STR_W_LEN ("140"), 3, 140},
+  {D_STR_W_LEN ("141"), 3, 141},
+  {D_STR_W_LEN ("142"), 3, 142},
+  {D_STR_W_LEN ("143"), 3, 143},
+  {D_STR_W_LEN ("144"), 3, 144},
+  {D_STR_W_LEN ("145"), 3, 145},
+  {D_STR_W_LEN ("146"), 3, 146},
+  {D_STR_W_LEN ("147"), 3, 147},
+  {D_STR_W_LEN ("148"), 3, 148},
+  {D_STR_W_LEN ("149"), 3, 149},
+  {D_STR_W_LEN ("150"), 3, 150},
+  {D_STR_W_LEN ("151"), 3, 151},
+  {D_STR_W_LEN ("152"), 3, 152},
+  {D_STR_W_LEN ("153"), 3, 153},
+  {D_STR_W_LEN ("154"), 3, 154},
+  {D_STR_W_LEN ("155"), 3, 155},
+  {D_STR_W_LEN ("156"), 3, 156},
+  {D_STR_W_LEN ("157"), 3, 157},
+  {D_STR_W_LEN ("158"), 3, 158},
+  {D_STR_W_LEN ("159"), 3, 159},
+  {D_STR_W_LEN ("160"), 3, 160},
+  {D_STR_W_LEN ("161"), 3, 161},
+  {D_STR_W_LEN ("162"), 3, 162},
+  {D_STR_W_LEN ("163"), 3, 163},
+  {D_STR_W_LEN ("164"), 3, 164},
+  {D_STR_W_LEN ("165"), 3, 165},
+  {D_STR_W_LEN ("166"), 3, 166},
+  {D_STR_W_LEN ("167"), 3, 167},
+  {D_STR_W_LEN ("168"), 3, 168},
+  {D_STR_W_LEN ("169"), 3, 169},
+  {D_STR_W_LEN ("170"), 3, 170},
+  {D_STR_W_LEN ("171"), 3, 171},
+  {D_STR_W_LEN ("172"), 3, 172},
+  {D_STR_W_LEN ("173"), 3, 173},
+  {D_STR_W_LEN ("174"), 3, 174},
+  {D_STR_W_LEN ("175"), 3, 175},
+  {D_STR_W_LEN ("176"), 3, 176},
+  {D_STR_W_LEN ("177"), 3, 177},
+  {D_STR_W_LEN ("178"), 3, 178},
+  {D_STR_W_LEN ("179"), 3, 179},
+  {D_STR_W_LEN ("180"), 3, 180},
+  {D_STR_W_LEN ("181"), 3, 181},
+  {D_STR_W_LEN ("182"), 3, 182},
+  {D_STR_W_LEN ("183"), 3, 183},
+  {D_STR_W_LEN ("184"), 3, 184},
+  {D_STR_W_LEN ("185"), 3, 185},
+  {D_STR_W_LEN ("186"), 3, 186},
+  {D_STR_W_LEN ("187"), 3, 187},
+  {D_STR_W_LEN ("188"), 3, 188},
+  {D_STR_W_LEN ("189"), 3, 189},
+  {D_STR_W_LEN ("190"), 3, 190},
+  {D_STR_W_LEN ("191"), 3, 191},
+  {D_STR_W_LEN ("192"), 3, 192},
+  {D_STR_W_LEN ("193"), 3, 193},
+  {D_STR_W_LEN ("194"), 3, 194},
+  {D_STR_W_LEN ("195"), 3, 195},
+  {D_STR_W_LEN ("196"), 3, 196},
+  {D_STR_W_LEN ("197"), 3, 197},
+  {D_STR_W_LEN ("198"), 3, 198},
+  {D_STR_W_LEN ("199"), 3, 199},
+  {D_STR_W_LEN ("200"), 3, 200},
+  {D_STR_W_LEN ("201"), 3, 201},
+  {D_STR_W_LEN ("202"), 3, 202},
+  {D_STR_W_LEN ("203"), 3, 203},
+  {D_STR_W_LEN ("204"), 3, 204},
+  {D_STR_W_LEN ("205"), 3, 205},
+  {D_STR_W_LEN ("206"), 3, 206},
+  {D_STR_W_LEN ("207"), 3, 207},
+  {D_STR_W_LEN ("208"), 3, 208},
+  {D_STR_W_LEN ("209"), 3, 209},
+  {D_STR_W_LEN ("210"), 3, 210},
+  {D_STR_W_LEN ("211"), 3, 211},
+  {D_STR_W_LEN ("212"), 3, 212},
+  {D_STR_W_LEN ("213"), 3, 213},
+  {D_STR_W_LEN ("214"), 3, 214},
+  {D_STR_W_LEN ("215"), 3, 215},
+  {D_STR_W_LEN ("216"), 3, 216},
+  {D_STR_W_LEN ("217"), 3, 217},
+  {D_STR_W_LEN ("218"), 3, 218},
+  {D_STR_W_LEN ("219"), 3, 219},
+  {D_STR_W_LEN ("220"), 3, 220},
+  {D_STR_W_LEN ("221"), 3, 221},
+  {D_STR_W_LEN ("222"), 3, 222},
+  {D_STR_W_LEN ("223"), 3, 223},
+  {D_STR_W_LEN ("224"), 3, 224},
+  {D_STR_W_LEN ("225"), 3, 225},
+  {D_STR_W_LEN ("226"), 3, 226},
+  {D_STR_W_LEN ("227"), 3, 227},
+  {D_STR_W_LEN ("228"), 3, 228},
+  {D_STR_W_LEN ("229"), 3, 229},
+  {D_STR_W_LEN ("230"), 3, 230},
+  {D_STR_W_LEN ("231"), 3, 231},
+  {D_STR_W_LEN ("232"), 3, 232},
+  {D_STR_W_LEN ("233"), 3, 233},
+  {D_STR_W_LEN ("234"), 3, 234},
+  {D_STR_W_LEN ("235"), 3, 235},
+  {D_STR_W_LEN ("236"), 3, 236},
+  {D_STR_W_LEN ("237"), 3, 237},
+  {D_STR_W_LEN ("238"), 3, 238},
+  {D_STR_W_LEN ("239"), 3, 239},
+  {D_STR_W_LEN ("240"), 3, 240},
+  {D_STR_W_LEN ("241"), 3, 241},
+  {D_STR_W_LEN ("242"), 3, 242},
+  {D_STR_W_LEN ("243"), 3, 243},
+  {D_STR_W_LEN ("244"), 3, 244},
+  {D_STR_W_LEN ("245"), 3, 245},
+  {D_STR_W_LEN ("246"), 3, 246},
+  {D_STR_W_LEN ("247"), 3, 247},
+  {D_STR_W_LEN ("248"), 3, 248},
+  {D_STR_W_LEN ("249"), 3, 249},
+  {D_STR_W_LEN ("250"), 3, 250},
+  {D_STR_W_LEN ("251"), 3, 251},
+  {D_STR_W_LEN ("252"), 3, 252},
+  {D_STR_W_LEN ("253"), 3, 253},
+  {D_STR_W_LEN ("254"), 3, 254},
+  {D_STR_W_LEN ("255"), 3, 255},
+};
+
+static const struct str_with_value duint8_w_values_p2[] = {
+  {D_STR_W_LEN ("00"), 2, 0},
+  {D_STR_W_LEN ("01"), 2, 1},
+  {D_STR_W_LEN ("02"), 2, 2},
+  {D_STR_W_LEN ("03"), 2, 3},
+  {D_STR_W_LEN ("04"), 2, 4},
+  {D_STR_W_LEN ("05"), 2, 5},
+  {D_STR_W_LEN ("06"), 2, 6},
+  {D_STR_W_LEN ("07"), 2, 7},
+  {D_STR_W_LEN ("08"), 2, 8},
+  {D_STR_W_LEN ("09"), 2, 9},
+  {D_STR_W_LEN ("10"), 2, 10},
+  {D_STR_W_LEN ("11"), 2, 11},
+  {D_STR_W_LEN ("12"), 2, 12},
+  {D_STR_W_LEN ("13"), 2, 13},
+  {D_STR_W_LEN ("14"), 2, 14},
+  {D_STR_W_LEN ("15"), 2, 15},
+  {D_STR_W_LEN ("16"), 2, 16},
+  {D_STR_W_LEN ("17"), 2, 17},
+  {D_STR_W_LEN ("18"), 2, 18},
+  {D_STR_W_LEN ("19"), 2, 19},
+  {D_STR_W_LEN ("20"), 2, 20},
+  {D_STR_W_LEN ("21"), 2, 21},
+  {D_STR_W_LEN ("22"), 2, 22},
+  {D_STR_W_LEN ("23"), 2, 23},
+  {D_STR_W_LEN ("24"), 2, 24},
+  {D_STR_W_LEN ("25"), 2, 25},
+  {D_STR_W_LEN ("26"), 2, 26},
+  {D_STR_W_LEN ("27"), 2, 27},
+  {D_STR_W_LEN ("28"), 2, 28},
+  {D_STR_W_LEN ("29"), 2, 29},
+  {D_STR_W_LEN ("30"), 2, 30},
+  {D_STR_W_LEN ("31"), 2, 31},
+  {D_STR_W_LEN ("32"), 2, 32},
+  {D_STR_W_LEN ("33"), 2, 33},
+  {D_STR_W_LEN ("34"), 2, 34},
+  {D_STR_W_LEN ("35"), 2, 35},
+  {D_STR_W_LEN ("36"), 2, 36},
+  {D_STR_W_LEN ("37"), 2, 37},
+  {D_STR_W_LEN ("38"), 2, 38},
+  {D_STR_W_LEN ("39"), 2, 39},
+  {D_STR_W_LEN ("40"), 2, 40},
+  {D_STR_W_LEN ("41"), 2, 41},
+  {D_STR_W_LEN ("42"), 2, 42},
+  {D_STR_W_LEN ("43"), 2, 43},
+  {D_STR_W_LEN ("44"), 2, 44},
+  {D_STR_W_LEN ("45"), 2, 45},
+  {D_STR_W_LEN ("46"), 2, 46},
+  {D_STR_W_LEN ("47"), 2, 47},
+  {D_STR_W_LEN ("48"), 2, 48},
+  {D_STR_W_LEN ("49"), 2, 49},
+  {D_STR_W_LEN ("50"), 2, 50},
+  {D_STR_W_LEN ("51"), 2, 51},
+  {D_STR_W_LEN ("52"), 2, 52},
+  {D_STR_W_LEN ("53"), 2, 53},
+  {D_STR_W_LEN ("54"), 2, 54},
+  {D_STR_W_LEN ("55"), 2, 55},
+  {D_STR_W_LEN ("56"), 2, 56},
+  {D_STR_W_LEN ("57"), 2, 57},
+  {D_STR_W_LEN ("58"), 2, 58},
+  {D_STR_W_LEN ("59"), 2, 59},
+  {D_STR_W_LEN ("60"), 2, 60},
+  {D_STR_W_LEN ("61"), 2, 61},
+  {D_STR_W_LEN ("62"), 2, 62},
+  {D_STR_W_LEN ("63"), 2, 63},
+  {D_STR_W_LEN ("64"), 2, 64},
+  {D_STR_W_LEN ("65"), 2, 65},
+  {D_STR_W_LEN ("66"), 2, 66},
+  {D_STR_W_LEN ("67"), 2, 67},
+  {D_STR_W_LEN ("68"), 2, 68},
+  {D_STR_W_LEN ("69"), 2, 69},
+  {D_STR_W_LEN ("70"), 2, 70},
+  {D_STR_W_LEN ("71"), 2, 71},
+  {D_STR_W_LEN ("72"), 2, 72},
+  {D_STR_W_LEN ("73"), 2, 73},
+  {D_STR_W_LEN ("74"), 2, 74},
+  {D_STR_W_LEN ("75"), 2, 75},
+  {D_STR_W_LEN ("76"), 2, 76},
+  {D_STR_W_LEN ("77"), 2, 77},
+  {D_STR_W_LEN ("78"), 2, 78},
+  {D_STR_W_LEN ("79"), 2, 79},
+  {D_STR_W_LEN ("80"), 2, 80},
+  {D_STR_W_LEN ("81"), 2, 81},
+  {D_STR_W_LEN ("82"), 2, 82},
+  {D_STR_W_LEN ("83"), 2, 83},
+  {D_STR_W_LEN ("84"), 2, 84},
+  {D_STR_W_LEN ("85"), 2, 85},
+  {D_STR_W_LEN ("86"), 2, 86},
+  {D_STR_W_LEN ("87"), 2, 87},
+  {D_STR_W_LEN ("88"), 2, 88},
+  {D_STR_W_LEN ("89"), 2, 89},
+  {D_STR_W_LEN ("90"), 2, 90},
+  {D_STR_W_LEN ("91"), 2, 91},
+  {D_STR_W_LEN ("92"), 2, 92},
+  {D_STR_W_LEN ("93"), 2, 93},
+  {D_STR_W_LEN ("94"), 2, 94},
+  {D_STR_W_LEN ("95"), 2, 95},
+  {D_STR_W_LEN ("96"), 2, 96},
+  {D_STR_W_LEN ("97"), 2, 97},
+  {D_STR_W_LEN ("98"), 2, 98},
+  {D_STR_W_LEN ("99"), 2, 99},
+  {D_STR_W_LEN ("100"), 3, 100},
+  {D_STR_W_LEN ("101"), 3, 101},
+  {D_STR_W_LEN ("102"), 3, 102},
+  {D_STR_W_LEN ("103"), 3, 103},
+  {D_STR_W_LEN ("104"), 3, 104},
+  {D_STR_W_LEN ("105"), 3, 105},
+  {D_STR_W_LEN ("106"), 3, 106},
+  {D_STR_W_LEN ("107"), 3, 107},
+  {D_STR_W_LEN ("108"), 3, 108},
+  {D_STR_W_LEN ("109"), 3, 109},
+  {D_STR_W_LEN ("110"), 3, 110},
+  {D_STR_W_LEN ("111"), 3, 111},
+  {D_STR_W_LEN ("112"), 3, 112},
+  {D_STR_W_LEN ("113"), 3, 113},
+  {D_STR_W_LEN ("114"), 3, 114},
+  {D_STR_W_LEN ("115"), 3, 115},
+  {D_STR_W_LEN ("116"), 3, 116},
+  {D_STR_W_LEN ("117"), 3, 117},
+  {D_STR_W_LEN ("118"), 3, 118},
+  {D_STR_W_LEN ("119"), 3, 119},
+  {D_STR_W_LEN ("120"), 3, 120},
+  {D_STR_W_LEN ("121"), 3, 121},
+  {D_STR_W_LEN ("122"), 3, 122},
+  {D_STR_W_LEN ("123"), 3, 123},
+  {D_STR_W_LEN ("124"), 3, 124},
+  {D_STR_W_LEN ("125"), 3, 125},
+  {D_STR_W_LEN ("126"), 3, 126},
+  {D_STR_W_LEN ("127"), 3, 127},
+  {D_STR_W_LEN ("128"), 3, 128},
+  {D_STR_W_LEN ("129"), 3, 129},
+  {D_STR_W_LEN ("130"), 3, 130},
+  {D_STR_W_LEN ("131"), 3, 131},
+  {D_STR_W_LEN ("132"), 3, 132},
+  {D_STR_W_LEN ("133"), 3, 133},
+  {D_STR_W_LEN ("134"), 3, 134},
+  {D_STR_W_LEN ("135"), 3, 135},
+  {D_STR_W_LEN ("136"), 3, 136},
+  {D_STR_W_LEN ("137"), 3, 137},
+  {D_STR_W_LEN ("138"), 3, 138},
+  {D_STR_W_LEN ("139"), 3, 139},
+  {D_STR_W_LEN ("140"), 3, 140},
+  {D_STR_W_LEN ("141"), 3, 141},
+  {D_STR_W_LEN ("142"), 3, 142},
+  {D_STR_W_LEN ("143"), 3, 143},
+  {D_STR_W_LEN ("144"), 3, 144},
+  {D_STR_W_LEN ("145"), 3, 145},
+  {D_STR_W_LEN ("146"), 3, 146},
+  {D_STR_W_LEN ("147"), 3, 147},
+  {D_STR_W_LEN ("148"), 3, 148},
+  {D_STR_W_LEN ("149"), 3, 149},
+  {D_STR_W_LEN ("150"), 3, 150},
+  {D_STR_W_LEN ("151"), 3, 151},
+  {D_STR_W_LEN ("152"), 3, 152},
+  {D_STR_W_LEN ("153"), 3, 153},
+  {D_STR_W_LEN ("154"), 3, 154},
+  {D_STR_W_LEN ("155"), 3, 155},
+  {D_STR_W_LEN ("156"), 3, 156},
+  {D_STR_W_LEN ("157"), 3, 157},
+  {D_STR_W_LEN ("158"), 3, 158},
+  {D_STR_W_LEN ("159"), 3, 159},
+  {D_STR_W_LEN ("160"), 3, 160},
+  {D_STR_W_LEN ("161"), 3, 161},
+  {D_STR_W_LEN ("162"), 3, 162},
+  {D_STR_W_LEN ("163"), 3, 163},
+  {D_STR_W_LEN ("164"), 3, 164},
+  {D_STR_W_LEN ("165"), 3, 165},
+  {D_STR_W_LEN ("166"), 3, 166},
+  {D_STR_W_LEN ("167"), 3, 167},
+  {D_STR_W_LEN ("168"), 3, 168},
+  {D_STR_W_LEN ("169"), 3, 169},
+  {D_STR_W_LEN ("170"), 3, 170},
+  {D_STR_W_LEN ("171"), 3, 171},
+  {D_STR_W_LEN ("172"), 3, 172},
+  {D_STR_W_LEN ("173"), 3, 173},
+  {D_STR_W_LEN ("174"), 3, 174},
+  {D_STR_W_LEN ("175"), 3, 175},
+  {D_STR_W_LEN ("176"), 3, 176},
+  {D_STR_W_LEN ("177"), 3, 177},
+  {D_STR_W_LEN ("178"), 3, 178},
+  {D_STR_W_LEN ("179"), 3, 179},
+  {D_STR_W_LEN ("180"), 3, 180},
+  {D_STR_W_LEN ("181"), 3, 181},
+  {D_STR_W_LEN ("182"), 3, 182},
+  {D_STR_W_LEN ("183"), 3, 183},
+  {D_STR_W_LEN ("184"), 3, 184},
+  {D_STR_W_LEN ("185"), 3, 185},
+  {D_STR_W_LEN ("186"), 3, 186},
+  {D_STR_W_LEN ("187"), 3, 187},
+  {D_STR_W_LEN ("188"), 3, 188},
+  {D_STR_W_LEN ("189"), 3, 189},
+  {D_STR_W_LEN ("190"), 3, 190},
+  {D_STR_W_LEN ("191"), 3, 191},
+  {D_STR_W_LEN ("192"), 3, 192},
+  {D_STR_W_LEN ("193"), 3, 193},
+  {D_STR_W_LEN ("194"), 3, 194},
+  {D_STR_W_LEN ("195"), 3, 195},
+  {D_STR_W_LEN ("196"), 3, 196},
+  {D_STR_W_LEN ("197"), 3, 197},
+  {D_STR_W_LEN ("198"), 3, 198},
+  {D_STR_W_LEN ("199"), 3, 199},
+  {D_STR_W_LEN ("200"), 3, 200},
+  {D_STR_W_LEN ("201"), 3, 201},
+  {D_STR_W_LEN ("202"), 3, 202},
+  {D_STR_W_LEN ("203"), 3, 203},
+  {D_STR_W_LEN ("204"), 3, 204},
+  {D_STR_W_LEN ("205"), 3, 205},
+  {D_STR_W_LEN ("206"), 3, 206},
+  {D_STR_W_LEN ("207"), 3, 207},
+  {D_STR_W_LEN ("208"), 3, 208},
+  {D_STR_W_LEN ("209"), 3, 209},
+  {D_STR_W_LEN ("210"), 3, 210},
+  {D_STR_W_LEN ("211"), 3, 211},
+  {D_STR_W_LEN ("212"), 3, 212},
+  {D_STR_W_LEN ("213"), 3, 213},
+  {D_STR_W_LEN ("214"), 3, 214},
+  {D_STR_W_LEN ("215"), 3, 215},
+  {D_STR_W_LEN ("216"), 3, 216},
+  {D_STR_W_LEN ("217"), 3, 217},
+  {D_STR_W_LEN ("218"), 3, 218},
+  {D_STR_W_LEN ("219"), 3, 219},
+  {D_STR_W_LEN ("220"), 3, 220},
+  {D_STR_W_LEN ("221"), 3, 221},
+  {D_STR_W_LEN ("222"), 3, 222},
+  {D_STR_W_LEN ("223"), 3, 223},
+  {D_STR_W_LEN ("224"), 3, 224},
+  {D_STR_W_LEN ("225"), 3, 225},
+  {D_STR_W_LEN ("226"), 3, 226},
+  {D_STR_W_LEN ("227"), 3, 227},
+  {D_STR_W_LEN ("228"), 3, 228},
+  {D_STR_W_LEN ("229"), 3, 229},
+  {D_STR_W_LEN ("230"), 3, 230},
+  {D_STR_W_LEN ("231"), 3, 231},
+  {D_STR_W_LEN ("232"), 3, 232},
+  {D_STR_W_LEN ("233"), 3, 233},
+  {D_STR_W_LEN ("234"), 3, 234},
+  {D_STR_W_LEN ("235"), 3, 235},
+  {D_STR_W_LEN ("236"), 3, 236},
+  {D_STR_W_LEN ("237"), 3, 237},
+  {D_STR_W_LEN ("238"), 3, 238},
+  {D_STR_W_LEN ("239"), 3, 239},
+  {D_STR_W_LEN ("240"), 3, 240},
+  {D_STR_W_LEN ("241"), 3, 241},
+  {D_STR_W_LEN ("242"), 3, 242},
+  {D_STR_W_LEN ("243"), 3, 243},
+  {D_STR_W_LEN ("244"), 3, 244},
+  {D_STR_W_LEN ("245"), 3, 245},
+  {D_STR_W_LEN ("246"), 3, 246},
+  {D_STR_W_LEN ("247"), 3, 247},
+  {D_STR_W_LEN ("248"), 3, 248},
+  {D_STR_W_LEN ("249"), 3, 249},
+  {D_STR_W_LEN ("250"), 3, 250},
+  {D_STR_W_LEN ("251"), 3, 251},
+  {D_STR_W_LEN ("252"), 3, 252},
+  {D_STR_W_LEN ("253"), 3, 253},
+  {D_STR_W_LEN ("254"), 3, 254},
+  {D_STR_W_LEN ("255"), 3, 255}
+};
+
+static const struct str_with_value duint8_w_values_p3[] = {
+  {D_STR_W_LEN ("000"), 3, 0},
+  {D_STR_W_LEN ("001"), 3, 1},
+  {D_STR_W_LEN ("002"), 3, 2},
+  {D_STR_W_LEN ("003"), 3, 3},
+  {D_STR_W_LEN ("004"), 3, 4},
+  {D_STR_W_LEN ("005"), 3, 5},
+  {D_STR_W_LEN ("006"), 3, 6},
+  {D_STR_W_LEN ("007"), 3, 7},
+  {D_STR_W_LEN ("008"), 3, 8},
+  {D_STR_W_LEN ("009"), 3, 9},
+  {D_STR_W_LEN ("010"), 3, 10},
+  {D_STR_W_LEN ("011"), 3, 11},
+  {D_STR_W_LEN ("012"), 3, 12},
+  {D_STR_W_LEN ("013"), 3, 13},
+  {D_STR_W_LEN ("014"), 3, 14},
+  {D_STR_W_LEN ("015"), 3, 15},
+  {D_STR_W_LEN ("016"), 3, 16},
+  {D_STR_W_LEN ("017"), 3, 17},
+  {D_STR_W_LEN ("018"), 3, 18},
+  {D_STR_W_LEN ("019"), 3, 19},
+  {D_STR_W_LEN ("020"), 3, 20},
+  {D_STR_W_LEN ("021"), 3, 21},
+  {D_STR_W_LEN ("022"), 3, 22},
+  {D_STR_W_LEN ("023"), 3, 23},
+  {D_STR_W_LEN ("024"), 3, 24},
+  {D_STR_W_LEN ("025"), 3, 25},
+  {D_STR_W_LEN ("026"), 3, 26},
+  {D_STR_W_LEN ("027"), 3, 27},
+  {D_STR_W_LEN ("028"), 3, 28},
+  {D_STR_W_LEN ("029"), 3, 29},
+  {D_STR_W_LEN ("030"), 3, 30},
+  {D_STR_W_LEN ("031"), 3, 31},
+  {D_STR_W_LEN ("032"), 3, 32},
+  {D_STR_W_LEN ("033"), 3, 33},
+  {D_STR_W_LEN ("034"), 3, 34},
+  {D_STR_W_LEN ("035"), 3, 35},
+  {D_STR_W_LEN ("036"), 3, 36},
+  {D_STR_W_LEN ("037"), 3, 37},
+  {D_STR_W_LEN ("038"), 3, 38},
+  {D_STR_W_LEN ("039"), 3, 39},
+  {D_STR_W_LEN ("040"), 3, 40},
+  {D_STR_W_LEN ("041"), 3, 41},
+  {D_STR_W_LEN ("042"), 3, 42},
+  {D_STR_W_LEN ("043"), 3, 43},
+  {D_STR_W_LEN ("044"), 3, 44},
+  {D_STR_W_LEN ("045"), 3, 45},
+  {D_STR_W_LEN ("046"), 3, 46},
+  {D_STR_W_LEN ("047"), 3, 47},
+  {D_STR_W_LEN ("048"), 3, 48},
+  {D_STR_W_LEN ("049"), 3, 49},
+  {D_STR_W_LEN ("050"), 3, 50},
+  {D_STR_W_LEN ("051"), 3, 51},
+  {D_STR_W_LEN ("052"), 3, 52},
+  {D_STR_W_LEN ("053"), 3, 53},
+  {D_STR_W_LEN ("054"), 3, 54},
+  {D_STR_W_LEN ("055"), 3, 55},
+  {D_STR_W_LEN ("056"), 3, 56},
+  {D_STR_W_LEN ("057"), 3, 57},
+  {D_STR_W_LEN ("058"), 3, 58},
+  {D_STR_W_LEN ("059"), 3, 59},
+  {D_STR_W_LEN ("060"), 3, 60},
+  {D_STR_W_LEN ("061"), 3, 61},
+  {D_STR_W_LEN ("062"), 3, 62},
+  {D_STR_W_LEN ("063"), 3, 63},
+  {D_STR_W_LEN ("064"), 3, 64},
+  {D_STR_W_LEN ("065"), 3, 65},
+  {D_STR_W_LEN ("066"), 3, 66},
+  {D_STR_W_LEN ("067"), 3, 67},
+  {D_STR_W_LEN ("068"), 3, 68},
+  {D_STR_W_LEN ("069"), 3, 69},
+  {D_STR_W_LEN ("070"), 3, 70},
+  {D_STR_W_LEN ("071"), 3, 71},
+  {D_STR_W_LEN ("072"), 3, 72},
+  {D_STR_W_LEN ("073"), 3, 73},
+  {D_STR_W_LEN ("074"), 3, 74},
+  {D_STR_W_LEN ("075"), 3, 75},
+  {D_STR_W_LEN ("076"), 3, 76},
+  {D_STR_W_LEN ("077"), 3, 77},
+  {D_STR_W_LEN ("078"), 3, 78},
+  {D_STR_W_LEN ("079"), 3, 79},
+  {D_STR_W_LEN ("080"), 3, 80},
+  {D_STR_W_LEN ("081"), 3, 81},
+  {D_STR_W_LEN ("082"), 3, 82},
+  {D_STR_W_LEN ("083"), 3, 83},
+  {D_STR_W_LEN ("084"), 3, 84},
+  {D_STR_W_LEN ("085"), 3, 85},
+  {D_STR_W_LEN ("086"), 3, 86},
+  {D_STR_W_LEN ("087"), 3, 87},
+  {D_STR_W_LEN ("088"), 3, 88},
+  {D_STR_W_LEN ("089"), 3, 89},
+  {D_STR_W_LEN ("090"), 3, 90},
+  {D_STR_W_LEN ("091"), 3, 91},
+  {D_STR_W_LEN ("092"), 3, 92},
+  {D_STR_W_LEN ("093"), 3, 93},
+  {D_STR_W_LEN ("094"), 3, 94},
+  {D_STR_W_LEN ("095"), 3, 95},
+  {D_STR_W_LEN ("096"), 3, 96},
+  {D_STR_W_LEN ("097"), 3, 97},
+  {D_STR_W_LEN ("098"), 3, 98},
+  {D_STR_W_LEN ("099"), 3, 99},
+  {D_STR_W_LEN ("100"), 3, 100},
+  {D_STR_W_LEN ("101"), 3, 101},
+  {D_STR_W_LEN ("102"), 3, 102},
+  {D_STR_W_LEN ("103"), 3, 103},
+  {D_STR_W_LEN ("104"), 3, 104},
+  {D_STR_W_LEN ("105"), 3, 105},
+  {D_STR_W_LEN ("106"), 3, 106},
+  {D_STR_W_LEN ("107"), 3, 107},
+  {D_STR_W_LEN ("108"), 3, 108},
+  {D_STR_W_LEN ("109"), 3, 109},
+  {D_STR_W_LEN ("110"), 3, 110},
+  {D_STR_W_LEN ("111"), 3, 111},
+  {D_STR_W_LEN ("112"), 3, 112},
+  {D_STR_W_LEN ("113"), 3, 113},
+  {D_STR_W_LEN ("114"), 3, 114},
+  {D_STR_W_LEN ("115"), 3, 115},
+  {D_STR_W_LEN ("116"), 3, 116},
+  {D_STR_W_LEN ("117"), 3, 117},
+  {D_STR_W_LEN ("118"), 3, 118},
+  {D_STR_W_LEN ("119"), 3, 119},
+  {D_STR_W_LEN ("120"), 3, 120},
+  {D_STR_W_LEN ("121"), 3, 121},
+  {D_STR_W_LEN ("122"), 3, 122},
+  {D_STR_W_LEN ("123"), 3, 123},
+  {D_STR_W_LEN ("124"), 3, 124},
+  {D_STR_W_LEN ("125"), 3, 125},
+  {D_STR_W_LEN ("126"), 3, 126},
+  {D_STR_W_LEN ("127"), 3, 127},
+  {D_STR_W_LEN ("128"), 3, 128},
+  {D_STR_W_LEN ("129"), 3, 129},
+  {D_STR_W_LEN ("130"), 3, 130},
+  {D_STR_W_LEN ("131"), 3, 131},
+  {D_STR_W_LEN ("132"), 3, 132},
+  {D_STR_W_LEN ("133"), 3, 133},
+  {D_STR_W_LEN ("134"), 3, 134},
+  {D_STR_W_LEN ("135"), 3, 135},
+  {D_STR_W_LEN ("136"), 3, 136},
+  {D_STR_W_LEN ("137"), 3, 137},
+  {D_STR_W_LEN ("138"), 3, 138},
+  {D_STR_W_LEN ("139"), 3, 139},
+  {D_STR_W_LEN ("140"), 3, 140},
+  {D_STR_W_LEN ("141"), 3, 141},
+  {D_STR_W_LEN ("142"), 3, 142},
+  {D_STR_W_LEN ("143"), 3, 143},
+  {D_STR_W_LEN ("144"), 3, 144},
+  {D_STR_W_LEN ("145"), 3, 145},
+  {D_STR_W_LEN ("146"), 3, 146},
+  {D_STR_W_LEN ("147"), 3, 147},
+  {D_STR_W_LEN ("148"), 3, 148},
+  {D_STR_W_LEN ("149"), 3, 149},
+  {D_STR_W_LEN ("150"), 3, 150},
+  {D_STR_W_LEN ("151"), 3, 151},
+  {D_STR_W_LEN ("152"), 3, 152},
+  {D_STR_W_LEN ("153"), 3, 153},
+  {D_STR_W_LEN ("154"), 3, 154},
+  {D_STR_W_LEN ("155"), 3, 155},
+  {D_STR_W_LEN ("156"), 3, 156},
+  {D_STR_W_LEN ("157"), 3, 157},
+  {D_STR_W_LEN ("158"), 3, 158},
+  {D_STR_W_LEN ("159"), 3, 159},
+  {D_STR_W_LEN ("160"), 3, 160},
+  {D_STR_W_LEN ("161"), 3, 161},
+  {D_STR_W_LEN ("162"), 3, 162},
+  {D_STR_W_LEN ("163"), 3, 163},
+  {D_STR_W_LEN ("164"), 3, 164},
+  {D_STR_W_LEN ("165"), 3, 165},
+  {D_STR_W_LEN ("166"), 3, 166},
+  {D_STR_W_LEN ("167"), 3, 167},
+  {D_STR_W_LEN ("168"), 3, 168},
+  {D_STR_W_LEN ("169"), 3, 169},
+  {D_STR_W_LEN ("170"), 3, 170},
+  {D_STR_W_LEN ("171"), 3, 171},
+  {D_STR_W_LEN ("172"), 3, 172},
+  {D_STR_W_LEN ("173"), 3, 173},
+  {D_STR_W_LEN ("174"), 3, 174},
+  {D_STR_W_LEN ("175"), 3, 175},
+  {D_STR_W_LEN ("176"), 3, 176},
+  {D_STR_W_LEN ("177"), 3, 177},
+  {D_STR_W_LEN ("178"), 3, 178},
+  {D_STR_W_LEN ("179"), 3, 179},
+  {D_STR_W_LEN ("180"), 3, 180},
+  {D_STR_W_LEN ("181"), 3, 181},
+  {D_STR_W_LEN ("182"), 3, 182},
+  {D_STR_W_LEN ("183"), 3, 183},
+  {D_STR_W_LEN ("184"), 3, 184},
+  {D_STR_W_LEN ("185"), 3, 185},
+  {D_STR_W_LEN ("186"), 3, 186},
+  {D_STR_W_LEN ("187"), 3, 187},
+  {D_STR_W_LEN ("188"), 3, 188},
+  {D_STR_W_LEN ("189"), 3, 189},
+  {D_STR_W_LEN ("190"), 3, 190},
+  {D_STR_W_LEN ("191"), 3, 191},
+  {D_STR_W_LEN ("192"), 3, 192},
+  {D_STR_W_LEN ("193"), 3, 193},
+  {D_STR_W_LEN ("194"), 3, 194},
+  {D_STR_W_LEN ("195"), 3, 195},
+  {D_STR_W_LEN ("196"), 3, 196},
+  {D_STR_W_LEN ("197"), 3, 197},
+  {D_STR_W_LEN ("198"), 3, 198},
+  {D_STR_W_LEN ("199"), 3, 199},
+  {D_STR_W_LEN ("200"), 3, 200},
+  {D_STR_W_LEN ("201"), 3, 201},
+  {D_STR_W_LEN ("202"), 3, 202},
+  {D_STR_W_LEN ("203"), 3, 203},
+  {D_STR_W_LEN ("204"), 3, 204},
+  {D_STR_W_LEN ("205"), 3, 205},
+  {D_STR_W_LEN ("206"), 3, 206},
+  {D_STR_W_LEN ("207"), 3, 207},
+  {D_STR_W_LEN ("208"), 3, 208},
+  {D_STR_W_LEN ("209"), 3, 209},
+  {D_STR_W_LEN ("210"), 3, 210},
+  {D_STR_W_LEN ("211"), 3, 211},
+  {D_STR_W_LEN ("212"), 3, 212},
+  {D_STR_W_LEN ("213"), 3, 213},
+  {D_STR_W_LEN ("214"), 3, 214},
+  {D_STR_W_LEN ("215"), 3, 215},
+  {D_STR_W_LEN ("216"), 3, 216},
+  {D_STR_W_LEN ("217"), 3, 217},
+  {D_STR_W_LEN ("218"), 3, 218},
+  {D_STR_W_LEN ("219"), 3, 219},
+  {D_STR_W_LEN ("220"), 3, 220},
+  {D_STR_W_LEN ("221"), 3, 221},
+  {D_STR_W_LEN ("222"), 3, 222},
+  {D_STR_W_LEN ("223"), 3, 223},
+  {D_STR_W_LEN ("224"), 3, 224},
+  {D_STR_W_LEN ("225"), 3, 225},
+  {D_STR_W_LEN ("226"), 3, 226},
+  {D_STR_W_LEN ("227"), 3, 227},
+  {D_STR_W_LEN ("228"), 3, 228},
+  {D_STR_W_LEN ("229"), 3, 229},
+  {D_STR_W_LEN ("230"), 3, 230},
+  {D_STR_W_LEN ("231"), 3, 231},
+  {D_STR_W_LEN ("232"), 3, 232},
+  {D_STR_W_LEN ("233"), 3, 233},
+  {D_STR_W_LEN ("234"), 3, 234},
+  {D_STR_W_LEN ("235"), 3, 235},
+  {D_STR_W_LEN ("236"), 3, 236},
+  {D_STR_W_LEN ("237"), 3, 237},
+  {D_STR_W_LEN ("238"), 3, 238},
+  {D_STR_W_LEN ("239"), 3, 239},
+  {D_STR_W_LEN ("240"), 3, 240},
+  {D_STR_W_LEN ("241"), 3, 241},
+  {D_STR_W_LEN ("242"), 3, 242},
+  {D_STR_W_LEN ("243"), 3, 243},
+  {D_STR_W_LEN ("244"), 3, 244},
+  {D_STR_W_LEN ("245"), 3, 245},
+  {D_STR_W_LEN ("246"), 3, 246},
+  {D_STR_W_LEN ("247"), 3, 247},
+  {D_STR_W_LEN ("248"), 3, 248},
+  {D_STR_W_LEN ("249"), 3, 249},
+  {D_STR_W_LEN ("250"), 3, 250},
+  {D_STR_W_LEN ("251"), 3, 251},
+  {D_STR_W_LEN ("252"), 3, 252},
+  {D_STR_W_LEN ("253"), 3, 253},
+  {D_STR_W_LEN ("254"), 3, 254},
+  {D_STR_W_LEN ("255"), 3, 255}
+};
+
+
+static const struct str_with_value *duint8_w_values_p[3] =
+{duint8_w_values_p1, duint8_w_values_p2, duint8_w_values_p3};
+
+int
+check_str_from_uint8_pad (void)
+{
+  int i;
+  int pad;
+  int t_failed = 0;
+
+  if ((256 != sizeof(duint8_w_values_p1) / sizeof(duint8_w_values_p1[0])) ||
+      (256 != sizeof(duint8_w_values_p2) / sizeof(duint8_w_values_p2[0])) ||
+      (256 != sizeof(duint8_w_values_p3) / sizeof(duint8_w_values_p3[0])))
+  {
+    fprintf (stderr,
+             "ERROR: wrong number of items in duint8_w_values_p*.\n");
+    return -1;
+  }
+  for (pad = 0; pad <= 3; pad++)
+  {
+    int table_num = pad - 1;
+    if (0 == pad)
+      table_num = 0;
+
+    for (i = 0; i <= 255; i++)
+    {
+      const struct str_with_value *const t = duint8_w_values_p[table_num] + i;
+      size_t b_size;
+      size_t rs;
+      char buf[8];
+
+      if (t->str.len < t->num_of_digt)
+      {
+        fprintf (stderr,
+                 "ERROR: dstrs_w_values[%u] has wrong num_of_digt (%u): 
num_of_digt is expected"
+                 " to be less or equal to str.len (%u).\n",
+                 (unsigned int) i, (unsigned int) t->num_of_digt, (unsigned
+                                                                   int) t->str.
+                 len);
+        return -1;
+      }
+      if (sizeof(buf) < t->str.len + 1)
+      {
+        fprintf (stderr,
+                 "ERROR: dstrs_w_values[%u] has too long (%u) string, "
+                 "size of 'buf' should be increased.\n",
+                 (unsigned int) i, (unsigned int) t->str.len);
+        return -1;
+      }
+      for (b_size = 0; b_size <= t->str.len + 1; ++b_size)
+      {
+        /* fill buffer with pseudo-random values */
+        memset (buf, '#', sizeof(buf));
+
+        rs = MHD_uint8_to_str_pad (t->val, pad, buf, b_size);
+
+        if (t->num_of_digt > b_size)
+        {
+          /* Must fail, buffer is too small for result */
+          if (0 != rs)
+          {
+            t_failed++;
+            fprintf (stderr,
+                     "FAILED: MHD_uint8_to_str_pad(%" PRIu64 ", %d, -> buf,"
+                     " %d) returned %" PRIuPTR
+                     ", while expecting 0.\n", t->val, (int) pad, (int) b_size,
+                     (intptr_t) rs);
+          }
+        }
+        else
+        {
+          if (t->num_of_digt != rs)
+          {
+            t_failed++;
+            fprintf (stderr,
+                     "FAILED: MHD_uint8_to_str_pad(%" PRIu64 ", %d, -> buf,"
+                     " %d) returned %" PRIuPTR
+                     ", while expecting %d.\n", t->val, (int) pad,
+                     (int) b_size, (intptr_t) rs, (int) t->num_of_digt);
+          }
+          else if (0 != memcmp (buf, t->str.str, t->num_of_digt))
+          {
+            t_failed++;
+            fprintf (stderr,
+                     "FAILED: MHD_uint8_to_str_pad(%" PRIu64 ", %d, "
+                     "-> \"%.*s\", %d) returned %" PRIuPTR ".\n",
+                     t->val, (int) pad, (int) rs, buf,
+                     (int) b_size, (intptr_t) rs);
+          }
+          else if (0 != memcmp (buf + rs, "########", sizeof(buf) - rs))
+          {
+            t_failed++;
+            fprintf (stderr,
+                     "FAILED: MHD_uint8_to_str_pad(%" PRIu64 ", %d,"
+                     " -> \"%.*s\", %d) returned %" PRIuPTR
+                     " and touched data after the resulting string.\n",
+                     t->val, (int) pad, (int) rs, buf, (int) b_size,
+                     (intptr_t) rs);
+          }
+        }
+      }
+    }
+  }
+  if ((verbose > 1) && (0 == t_failed))
+    printf ("PASSED: MHD_uint8_to_str_pad.\n");
+
+  return t_failed;
+}
+
+
 int
 run_str_from_X_tests (void)
 {
   int str_from_uint16;
   int str_from_uint64;
   int strx_from_uint32;
+  int str_from_uint8_pad;
   int failures;
 
   failures = 0;
@@ -3728,7 +4617,6 @@ run_str_from_X_tests (void)
   else if (verbose > 1)
     printf (
       "PASSED: testcase check_str_from_uint16() successfully passed.\n\n");
-
   strx_from_uint32 = check_strx_from_uint32 ();
   if (strx_from_uint32 != 0)
   {
@@ -3746,6 +4634,23 @@ run_str_from_X_tests (void)
     printf (
       "PASSED: testcase check_strx_from_uint32() successfully passed.\n\n");
 
+  str_from_uint8_pad = check_str_from_uint8_pad ();
+  if (str_from_uint8_pad != 0)
+  {
+    if (str_from_uint8_pad < 0)
+    {
+      fprintf (stderr,
+               "ERROR: test internal error in check_str_from_uint8_pad().\n");
+      return 99;
+    }
+    fprintf (stderr,
+             "FAILED: testcase check_str_from_uint8_pad() failed.\n\n");
+    failures += str_from_uint8_pad;
+  }
+  else if (verbose > 1)
+    printf (
+      "PASSED: testcase check_str_from_uint8_pad() successfully passed.\n\n");
+
   if (failures)
   {
     if (verbose > 0)

-- 
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]