4#include <winpr/tchar.h>
5#include <winpr/print.h>
20static BOOL test_bin_tohex_string(
void)
24 const BYTE binbuffer[33] = WINPR_C_ARRAY_INIT;
25 const char empty[33] = WINPR_C_ARRAY_INIT;
26 char strbuffer[33] = WINPR_C_ARRAY_INIT;
28 size_t len = winpr_BinToHexStringBuffer(
nullptr,
sizeof(binbuffer), strbuffer,
29 sizeof(strbuffer), TRUE);
32 if (memcmp(strbuffer, empty,
sizeof(strbuffer)) != 0)
34 len = winpr_BinToHexStringBuffer(binbuffer, 0, strbuffer,
sizeof(strbuffer), TRUE);
37 if (memcmp(strbuffer, empty,
sizeof(strbuffer)) != 0)
39 len = winpr_BinToHexStringBuffer(binbuffer,
sizeof(binbuffer),
nullptr,
sizeof(strbuffer),
43 if (memcmp(strbuffer, empty,
sizeof(strbuffer)) != 0)
45 len = winpr_BinToHexStringBuffer(binbuffer,
sizeof(binbuffer), strbuffer, 0, TRUE);
48 if (memcmp(strbuffer, empty,
sizeof(strbuffer)) != 0)
50 len = winpr_BinToHexStringBuffer(binbuffer, 0, strbuffer, 0, TRUE);
53 if (memcmp(strbuffer, empty,
sizeof(strbuffer)) != 0)
55 len = winpr_BinToHexStringBuffer(binbuffer,
sizeof(binbuffer),
nullptr, 0, TRUE);
58 if (memcmp(strbuffer, empty,
sizeof(strbuffer)) != 0)
60 len = winpr_BinToHexStringBuffer(
nullptr,
sizeof(binbuffer), strbuffer, 0, TRUE);
63 if (memcmp(strbuffer, empty,
sizeof(strbuffer)) != 0)
66 len = winpr_BinToHexStringBuffer(binbuffer, 0,
nullptr, 0, TRUE);
69 if (memcmp(strbuffer, empty,
sizeof(strbuffer)) != 0)
71 len = winpr_BinToHexStringBuffer(
nullptr, 0,
nullptr, 0, TRUE);
74 if (memcmp(strbuffer, empty,
sizeof(strbuffer)) != 0)
76 len = winpr_BinToHexStringBuffer(binbuffer, 0,
nullptr, 0, FALSE);
79 if (memcmp(strbuffer, empty,
sizeof(strbuffer)) != 0)
83 const BYTE binbuffer1[] = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17 };
84 const char strbuffer1[] =
"0102030405060708090A0B0C0D0E0F1011";
85 const char strbuffer1_space[] =
"01 02 03 04 05 06 07 08 09 0A 0B 0C 0D 0E 0F 10 11";
87 char buffer[1024] = WINPR_C_ARRAY_INIT;
88 size_t len = winpr_BinToHexStringBuffer(binbuffer1,
sizeof(binbuffer1), buffer,
89 sizeof(buffer), FALSE);
90 if (len != strnlen(strbuffer1,
sizeof(strbuffer1)))
92 if (memcmp(strbuffer1, buffer,
sizeof(strbuffer1)) != 0)
94 len = winpr_BinToHexStringBuffer(binbuffer1,
sizeof(binbuffer1), buffer,
sizeof(buffer),
96 if (len != strnlen(strbuffer1_space,
sizeof(strbuffer1_space)))
98 if (memcmp(strbuffer1_space, buffer,
sizeof(strbuffer1_space)) != 0)
102 const BYTE binbuffer1[] = { 0xF1, 0xe2, 0xD3, 0xc4, 0xB5, 0xA6, 0x97, 0x88, 0x79,
103 0x6A, 0x5b, 0x4C, 0x3d, 0x2E, 0x1f, 0x00, 0xfF };
104 const char strbuffer1[] =
"F1E2D3C4B5A69788796A5B4C3D2E1F00FF";
105 const char strbuffer1_space[] =
"F1 E2 D3 C4 B5 A6 97 88 79 6A 5B 4C 3D 2E 1F 00 FF";
106 char buffer[1024] = WINPR_C_ARRAY_INIT;
107 size_t len = winpr_BinToHexStringBuffer(binbuffer1,
sizeof(binbuffer1), buffer,
108 sizeof(buffer), FALSE);
109 if (len != strnlen(strbuffer1,
sizeof(strbuffer1)))
111 if (memcmp(strbuffer1, buffer,
sizeof(strbuffer1)) != 0)
113 len = winpr_BinToHexStringBuffer(binbuffer1,
sizeof(binbuffer1), buffer,
sizeof(buffer),
115 if (len != strnlen(strbuffer1_space,
sizeof(strbuffer1_space)))
117 if (memcmp(strbuffer1_space, buffer,
sizeof(strbuffer1_space)) != 0)
127static BOOL test_bin_tohex_string_alloc(
void)
132 const BYTE binbuffer[33] = WINPR_C_ARRAY_INIT;
134 str = winpr_BinToHexString(
nullptr,
sizeof(binbuffer), TRUE);
137 str = winpr_BinToHexString(binbuffer, 0, TRUE);
140 str = winpr_BinToHexString(binbuffer, 0, FALSE);
143 str = winpr_BinToHexString(
nullptr,
sizeof(binbuffer), FALSE);
148 const BYTE binbuffer1[] = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17 };
149 const char strbuffer1[] =
"0102030405060708090A0B0C0D0E0F1011";
150 const char strbuffer1_space[] =
"01 02 03 04 05 06 07 08 09 0A 0B 0C 0D 0E 0F 10 11";
152 str = winpr_BinToHexString(binbuffer1,
sizeof(binbuffer1), FALSE);
155 if (memcmp(strbuffer1, str,
sizeof(strbuffer1)) != 0)
158 str = winpr_BinToHexString(binbuffer1,
sizeof(binbuffer1), TRUE);
161 if (memcmp(strbuffer1_space, str,
sizeof(strbuffer1_space)) != 0)
167 const BYTE binbuffer1[] = { 0xF1, 0xe2, 0xD3, 0xc4, 0xB5, 0xA6, 0x97, 0x88, 0x79,
168 0x6A, 0x5b, 0x4C, 0x3d, 0x2E, 0x1f, 0x00, 0xfF };
169 const char strbuffer1[] =
"F1E2D3C4B5A69788796A5B4C3D2E1F00FF";
170 const char strbuffer1_space[] =
"F1 E2 D3 C4 B5 A6 97 88 79 6A 5B 4C 3D 2E 1F 00 FF";
171 str = winpr_BinToHexString(binbuffer1,
sizeof(binbuffer1), FALSE);
174 if (memcmp(strbuffer1, str,
sizeof(strbuffer1)) != 0)
178 str = winpr_BinToHexString(binbuffer1,
sizeof(binbuffer1), TRUE);
181 if (memcmp(strbuffer1_space, str,
sizeof(strbuffer1_space)) != 0)
192static BOOL test_hex_string_to_bin(
void)
196 const char stringbuffer[] =
"123456789ABCDEFabcdef";
197 const BYTE empty[1024] = WINPR_C_ARRAY_INIT;
198 BYTE buffer[1024] = WINPR_C_ARRAY_INIT;
199 size_t len = winpr_HexStringToBinBuffer(
nullptr, 0,
nullptr, 0);
202 if (memcmp(buffer, empty,
sizeof(buffer)) != 0)
204 len = winpr_HexStringToBinBuffer(
nullptr,
sizeof(stringbuffer), buffer,
sizeof(buffer));
207 if (memcmp(buffer, empty,
sizeof(buffer)) != 0)
209 len = winpr_HexStringToBinBuffer(stringbuffer, 0, buffer,
sizeof(buffer));
212 if (memcmp(buffer, empty,
sizeof(buffer)) != 0)
215 winpr_HexStringToBinBuffer(stringbuffer,
sizeof(stringbuffer),
nullptr,
sizeof(buffer));
218 if (memcmp(buffer, empty,
sizeof(buffer)) != 0)
220 len = winpr_HexStringToBinBuffer(stringbuffer,
sizeof(stringbuffer), buffer, 0);
223 if (memcmp(buffer, empty,
sizeof(buffer)) != 0)
227 const char stringbuffer[] =
"123456789ABCDEF1abcdef";
228 const BYTE expected[] = {
229 0x12, 0x34, 0x56, 0x78, 0x9a, 0xbc, 0xde, 0xf1, 0xab, 0xcd, 0xef
231 BYTE buffer[32] = WINPR_C_ARRAY_INIT;
233 winpr_HexStringToBinBuffer(stringbuffer,
sizeof(stringbuffer), buffer,
sizeof(buffer));
234 if (len !=
sizeof(expected))
236 if (memcmp(buffer, expected,
sizeof(expected)) != 0)
238 len = winpr_HexStringToBinBuffer(stringbuffer,
sizeof(stringbuffer), buffer,
239 sizeof(expected) / 2);
240 if (len !=
sizeof(expected) / 2)
242 if (memcmp(buffer, expected,
sizeof(expected) / 2) != 0)
246 const char stringbuffer[] =
"12 34 56 78 9A BC DE F1 ab cd ef";
247 const BYTE expected[] = {
248 0x12, 0x34, 0x56, 0x78, 0x9a, 0xbc, 0xde, 0xf1, 0xab, 0xcd, 0xef
250 BYTE buffer[1024] = WINPR_C_ARRAY_INIT;
252 winpr_HexStringToBinBuffer(stringbuffer,
sizeof(stringbuffer), buffer,
sizeof(buffer));
253 if (len !=
sizeof(expected))
255 if (memcmp(buffer, expected,
sizeof(expected)) != 0)
257 len = winpr_HexStringToBinBuffer(stringbuffer,
sizeof(stringbuffer), buffer,
258 sizeof(expected) / 2);
259 if (len !=
sizeof(expected) / 2)
261 if (memcmp(buffer, expected,
sizeof(expected) / 2) != 0)
265 const char stringbuffer[] =
"123456789ABCDEF1abcdef9";
266 const BYTE expected[] = { 0x12, 0x34, 0x56, 0x78, 0x9a, 0xbc,
267 0xde, 0xf1, 0xab, 0xcd, 0xef, 0x09 };
268 BYTE buffer[1024] = WINPR_C_ARRAY_INIT;
270 winpr_HexStringToBinBuffer(stringbuffer,
sizeof(stringbuffer), buffer,
sizeof(buffer));
271 if (len !=
sizeof(expected))
273 if (memcmp(buffer, expected,
sizeof(expected)) != 0)
275 len = winpr_HexStringToBinBuffer(stringbuffer,
sizeof(stringbuffer), buffer,
276 sizeof(expected) / 2);
277 if (len !=
sizeof(expected) / 2)
279 if (memcmp(buffer, expected,
sizeof(expected) / 2) != 0)
283 const char stringbuffer[] =
"12 34 56 78 9A BC DE F1 ab cd ef 9";
284 const BYTE expected[] = { 0x12, 0x34, 0x56, 0x78, 0x9a, 0xbc,
285 0xde, 0xf1, 0xab, 0xcd, 0xef, 0x09 };
286 BYTE buffer[1024] = WINPR_C_ARRAY_INIT;
288 winpr_HexStringToBinBuffer(stringbuffer,
sizeof(stringbuffer), buffer,
sizeof(buffer));
289 if (len !=
sizeof(expected))
291 if (memcmp(buffer, expected,
sizeof(expected)) != 0)
293 len = winpr_HexStringToBinBuffer(stringbuffer,
sizeof(stringbuffer), buffer,
294 sizeof(expected) / 2);
295 if (len !=
sizeof(expected) / 2)
297 if (memcmp(buffer, expected,
sizeof(expected) / 2) != 0)
305int TestPrint(
int argc,
char* argv[])
326 _printf(
"%03d\n", b);
329 _printf(
"%3.2f\n", d);
350 for (
int a = 0; a <= 300; a = a + 20)
351 _printf(
"%3d %06.3f\n", a, (5.0 / 9.0) * (a - 32));
365 _printf(
"The color: %s\n",
"blue");
366 _printf(
"First number: %d\n", 12345);
367 _printf(
"Second number: %04d\n", 25);
368 _printf(
"Third number: %i\n", 1234);
369 _printf(
"Float number: %3.2f\n", 3.14159);
370 _printf(
"Hexadecimal: %x/%X\n", 255, 255);
371 _printf(
"Octal: %o\n", 255);
372 _printf(
"Unsigned value: %u\n", 150);
373 _printf(
"Just print the percentage sign %%\n");
386 _printf(
":%s:\n",
"Hello, world!");
387 _printf(
":%15s:\n",
"Hello, world!");
388 _printf(
":%.10s:\n",
"Hello, world!");
389 _printf(
":%-10s:\n",
"Hello, world!");
390 _printf(
":%-15s:\n",
"Hello, world!");
391 _printf(
":%.15s:\n",
"Hello, world!");
392 _printf(
":%15.10s:\n",
"Hello, world!");
393 _printf(
":%-15.10s:\n",
"Hello, world!");
395 if (!test_bin_tohex_string())
397 if (!test_bin_tohex_string_alloc())
399 if (!test_hex_string_to_bin())