t_snprintb.c revision 1.28 1 1.28 rillig /* $NetBSD: t_snprintb.c,v 1.28 2024/02/24 12:40:00 rillig Exp $ */
2 1.1 jmmv
3 1.1 jmmv /*
4 1.9 rillig * Copyright (c) 2002, 2004, 2008, 2010, 2024 The NetBSD Foundation, Inc.
5 1.1 jmmv * All rights reserved.
6 1.1 jmmv *
7 1.9 rillig * This code was contributed to The NetBSD Foundation by Christos Zoulas and
8 1.9 rillig * Roland Illig.
9 1.1 jmmv *
10 1.1 jmmv * Redistribution and use in source and binary forms, with or without
11 1.1 jmmv * modification, are permitted provided that the following conditions
12 1.1 jmmv * are met:
13 1.1 jmmv * 1. Redistributions of source code must retain the above copyright
14 1.1 jmmv * notice, this list of conditions and the following disclaimer.
15 1.1 jmmv * 2. Redistributions in binary form must reproduce the above copyright
16 1.1 jmmv * notice, this list of conditions and the following disclaimer in the
17 1.1 jmmv * documentation and/or other materials provided with the distribution.
18 1.1 jmmv *
19 1.1 jmmv * THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND CONTRIBUTORS
20 1.1 jmmv * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
21 1.1 jmmv * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
22 1.1 jmmv * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS
23 1.1 jmmv * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
24 1.1 jmmv * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
25 1.1 jmmv * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
26 1.1 jmmv * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
27 1.1 jmmv * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
28 1.1 jmmv * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
29 1.1 jmmv * POSSIBILITY OF SUCH DAMAGE.
30 1.1 jmmv */
31 1.1 jmmv
32 1.1 jmmv #include <sys/cdefs.h>
33 1.21 rillig __COPYRIGHT("@(#) Copyright (c) 2008, 2010, 2024\
34 1.1 jmmv The NetBSD Foundation, inc. All rights reserved.");
35 1.28 rillig __RCSID("$NetBSD: t_snprintb.c,v 1.28 2024/02/24 12:40:00 rillig Exp $");
36 1.1 jmmv
37 1.9 rillig #include <stdio.h>
38 1.1 jmmv #include <string.h>
39 1.1 jmmv #include <util.h>
40 1.9 rillig #include <vis.h>
41 1.1 jmmv
42 1.1 jmmv #include <atf-c.h>
43 1.1 jmmv
44 1.9 rillig static const char *
45 1.15 rillig vis_arr(const char *arr, size_t arrsize)
46 1.9 rillig {
47 1.10 rillig static char buf[6][1024];
48 1.9 rillig static size_t i;
49 1.9 rillig
50 1.10 rillig i = (i + 1) % (sizeof(buf) / sizeof(buf[0]));
51 1.23 rillig buf[i][0] = '"';
52 1.23 rillig int rv = strnvisx(buf[i] + 1, sizeof(buf[i]) - 2, arr, arrsize,
53 1.10 rillig VIS_WHITE | VIS_OCTAL);
54 1.15 rillig ATF_REQUIRE_MSG(rv >= 0, "strnvisx failed for size %zu", arrsize);
55 1.23 rillig strcpy(buf[i] + 1 + rv, "\"");
56 1.9 rillig return buf[i];
57 1.9 rillig }
58 1.9 rillig
59 1.1 jmmv static void
60 1.27 rillig check_snprintb_m(const char *file, size_t line,
61 1.21 rillig size_t bufsize, const char *bitfmt, size_t bitfmtlen, uint64_t val,
62 1.27 rillig size_t line_max,
63 1.21 rillig int want_rv, const char *want_buf, size_t want_bufsize)
64 1.1 jmmv {
65 1.9 rillig char buf[1024];
66 1.9 rillig
67 1.10 rillig ATF_REQUIRE(bufsize <= sizeof(buf));
68 1.21 rillig ATF_REQUIRE(want_bufsize <= sizeof(buf));
69 1.27 rillig if (bitfmtlen > 2 && bitfmt[0] == '\177')
70 1.27 rillig ATF_REQUIRE_MSG(
71 1.27 rillig bitfmt[bitfmtlen - 1] == '\0',
72 1.27 rillig "%s:%zu: missing trailing '\\0' in new-style bitfmt",
73 1.27 rillig file, line);
74 1.24 rillig if (bufsize == 0)
75 1.27 rillig want_bufsize = 0;
76 1.10 rillig
77 1.10 rillig memset(buf, 'Z', sizeof(buf));
78 1.27 rillig int rv = snprintb_m(buf, bufsize, bitfmt, val, line_max);
79 1.27 rillig
80 1.24 rillig size_t have_bufsize = sizeof(buf);
81 1.24 rillig while (have_bufsize > 0 && buf[have_bufsize - 1] == 'Z')
82 1.24 rillig have_bufsize--;
83 1.27 rillig if (rv > 0 && (unsigned)rv < have_bufsize
84 1.27 rillig && buf[rv - 1] == '\0' && buf[rv] == '\0')
85 1.27 rillig have_bufsize = rv + 1;
86 1.27 rillig if (rv < 0)
87 1.27 rillig for (size_t i = have_bufsize; i >= 2; i--)
88 1.27 rillig if (buf[i - 2] == '\0' && buf[i - 1] == '\0')
89 1.27 rillig have_bufsize = i;
90 1.1 jmmv
91 1.9 rillig ATF_CHECK_MSG(
92 1.21 rillig rv == want_rv
93 1.21 rillig && memcmp(buf, want_buf, want_bufsize) == 0
94 1.27 rillig && (line_max == 0 || have_bufsize < 2
95 1.27 rillig || buf[have_bufsize - 2] == '\0')
96 1.27 rillig && (have_bufsize < 1 || buf[have_bufsize - 1] == '\0'),
97 1.9 rillig "failed:\n"
98 1.9 rillig "\ttest case: %s:%zu\n"
99 1.9 rillig "\tformat: %s\n"
100 1.9 rillig "\tvalue: %#jx\n"
101 1.27 rillig "\tline_max: %zu\n"
102 1.10 rillig "\twant: %d bytes %s\n"
103 1.10 rillig "\thave: %d bytes %s\n",
104 1.9 rillig file, line,
105 1.21 rillig vis_arr(bitfmt, bitfmtlen),
106 1.11 rillig (uintmax_t)val,
107 1.27 rillig line_max,
108 1.21 rillig want_rv, vis_arr(want_buf, want_bufsize),
109 1.24 rillig rv, vis_arr(buf, have_bufsize));
110 1.1 jmmv }
111 1.1 jmmv
112 1.27 rillig #define h_snprintb_m_len(bufsize, bitfmt, val, line_max, \
113 1.27 rillig want_rv, want_buf) \
114 1.27 rillig check_snprintb_m(__FILE__, __LINE__, \
115 1.27 rillig bufsize, bitfmt, sizeof(bitfmt) - 1, val, line_max, \
116 1.21 rillig want_rv, want_buf, sizeof(want_buf))
117 1.27 rillig
118 1.21 rillig #define h_snprintb(bitfmt, val, want_buf) \
119 1.27 rillig h_snprintb_m_len(1024, bitfmt, val, 0, sizeof(want_buf) - 1, want_buf)
120 1.10 rillig
121 1.27 rillig #define h_snprintb_len(bufsize, bitfmt, val, want_rv, want_buf) \
122 1.27 rillig h_snprintb_m_len(bufsize, bitfmt, val, 0, want_rv, want_buf)
123 1.10 rillig
124 1.27 rillig #define h_snprintb_error(bitfmt, want_buf) \
125 1.27 rillig h_snprintb_m_len(1024, bitfmt, 0, 0, -1, want_buf)
126 1.10 rillig
127 1.27 rillig #define h_snprintb_m(bitfmt, val, line_max, want_buf) \
128 1.27 rillig h_snprintb_m_len(1024, bitfmt, val, line_max, \
129 1.27 rillig sizeof(want_buf) - 1, want_buf)
130 1.9 rillig
131 1.1 jmmv ATF_TC(snprintb);
132 1.1 jmmv ATF_TC_HEAD(snprintb, tc)
133 1.1 jmmv {
134 1.1 jmmv atf_tc_set_md_var(tc, "descr", "Checks snprintb(3)");
135 1.1 jmmv }
136 1.1 jmmv ATF_TC_BODY(snprintb, tc)
137 1.1 jmmv {
138 1.10 rillig
139 1.21 rillig // style and number base, old style, octal, zero value
140 1.21 rillig //
141 1.21 rillig // The value 0 does not get a leading '0'.
142 1.21 rillig h_snprintb(
143 1.21 rillig "\010",
144 1.21 rillig 0,
145 1.21 rillig "0");
146 1.21 rillig
147 1.21 rillig // style and number base, old style, octal, nonzero value
148 1.21 rillig //
149 1.21 rillig // Nonzero octal values get a leading '0'.
150 1.9 rillig h_snprintb(
151 1.21 rillig "\010",
152 1.21 rillig 0xff,
153 1.21 rillig "0377");
154 1.21 rillig
155 1.21 rillig // style and number base, old style, decimal, zero value
156 1.21 rillig h_snprintb(
157 1.21 rillig "\012",
158 1.21 rillig 0,
159 1.21 rillig "0");
160 1.9 rillig
161 1.21 rillig // style and number base, old style, decimal, nonzero value
162 1.9 rillig h_snprintb(
163 1.21 rillig "\012",
164 1.21 rillig 0xff,
165 1.21 rillig "255");
166 1.10 rillig
167 1.21 rillig // style and number base, old style, hexadecimal, zero value
168 1.21 rillig //
169 1.21 rillig // The value 0 does not get a leading '0x'.
170 1.10 rillig h_snprintb(
171 1.21 rillig "\020",
172 1.21 rillig 0,
173 1.21 rillig "0");
174 1.21 rillig
175 1.21 rillig // style and number base, old style, hexadecimal, nonzero value
176 1.21 rillig //
177 1.21 rillig // Nonzero hexadecimal values get a leading '0x'.
178 1.10 rillig h_snprintb(
179 1.21 rillig "\177\020",
180 1.21 rillig 0xff,
181 1.21 rillig "0xff");
182 1.10 rillig
183 1.21 rillig // style and number base, old style, invalid base 0
184 1.10 rillig h_snprintb_error(
185 1.27 rillig "",
186 1.27 rillig "#");
187 1.10 rillig
188 1.21 rillig // style and number base, old style, invalid base 2
189 1.10 rillig h_snprintb_error(
190 1.27 rillig "\002",
191 1.27 rillig "#");
192 1.10 rillig
193 1.21 rillig // style and number base, old style, invalid base 255 or -1
194 1.10 rillig h_snprintb_error(
195 1.27 rillig "\377",
196 1.27 rillig "#");
197 1.10 rillig
198 1.21 rillig // style and number base, new style, octal, zero value
199 1.21 rillig //
200 1.21 rillig // The value 0 does not get a leading '0'.
201 1.21 rillig h_snprintb(
202 1.21 rillig "\177\010",
203 1.21 rillig 0,
204 1.21 rillig "0");
205 1.21 rillig
206 1.21 rillig // style and number base, new style, octal, nonzero value
207 1.21 rillig //
208 1.21 rillig // Nonzero octal values get a leading '0'.
209 1.21 rillig h_snprintb(
210 1.21 rillig "\177\010",
211 1.21 rillig 0xff,
212 1.21 rillig "0377");
213 1.21 rillig
214 1.21 rillig // style and number base, new style, decimal, zero value
215 1.21 rillig h_snprintb(
216 1.21 rillig "\177\012",
217 1.21 rillig 0,
218 1.21 rillig "0");
219 1.21 rillig
220 1.21 rillig // style and number base, new style, decimal, nonzero value
221 1.21 rillig h_snprintb(
222 1.21 rillig "\177\012",
223 1.21 rillig 0xff,
224 1.21 rillig "255");
225 1.21 rillig
226 1.21 rillig // style and number base, new style, hexadecimal, zero value
227 1.21 rillig //
228 1.21 rillig // The value 0 does not get a leading '0x'.
229 1.21 rillig h_snprintb(
230 1.21 rillig "\177\020",
231 1.21 rillig 0,
232 1.21 rillig "0");
233 1.21 rillig
234 1.21 rillig // style and number base, new style, hexadecimal, nonzero value
235 1.21 rillig //
236 1.21 rillig // Nonzero hexadecimal values get a leading '0x'.
237 1.21 rillig h_snprintb(
238 1.21 rillig "\177\020",
239 1.21 rillig 0xff,
240 1.21 rillig "0xff");
241 1.21 rillig
242 1.21 rillig // style and number base, new style, invalid number base 0
243 1.21 rillig h_snprintb_error(
244 1.27 rillig "\177",
245 1.27 rillig "#");
246 1.21 rillig
247 1.21 rillig // style and number base, new style, invalid number base 2
248 1.21 rillig h_snprintb_error(
249 1.27 rillig "\177\002",
250 1.27 rillig "#");
251 1.21 rillig
252 1.21 rillig // style and number base, new style, invalid number base 255 or -1
253 1.21 rillig h_snprintb_error(
254 1.27 rillig "\177\377",
255 1.27 rillig "#");
256 1.21 rillig
257 1.21 rillig // old style, from lsb to msb
258 1.21 rillig h_snprintb(
259 1.21 rillig "\020"
260 1.21 rillig "\001bit1"
261 1.21 rillig "\002bit2"
262 1.21 rillig "\037bit31"
263 1.21 rillig "\040bit32",
264 1.21 rillig 0xffffffff80000001,
265 1.21 rillig "0xffffffff80000001<bit1,bit32>");
266 1.21 rillig
267 1.21 rillig // old style, invalid bit number, at the beginning
268 1.21 rillig h_snprintb_error(
269 1.21 rillig "\020"
270 1.27 rillig "\041invalid",
271 1.27 rillig "0#");
272 1.21 rillig
273 1.21 rillig // old style, invalid bit number, in the middle
274 1.21 rillig //
275 1.21 rillig // The old-style format supports only 32 bits, interpreting the
276 1.21 rillig // \041 as part of the text belonging to bit 1.
277 1.21 rillig h_snprintb(
278 1.21 rillig "\020"
279 1.21 rillig "\001bit1"
280 1.21 rillig "\041bit33",
281 1.21 rillig 0x1,
282 1.21 rillig "0x1<bit1!bit33>");
283 1.21 rillig
284 1.21 rillig // old style, repeated bit numbers
285 1.21 rillig //
286 1.21 rillig // When a bit number is mentioned more than once,
287 1.21 rillig // this is most likely a typo.
288 1.21 rillig h_snprintb(
289 1.21 rillig "\020"
290 1.21 rillig "\001once"
291 1.21 rillig "\001again",
292 1.21 rillig 0x1,
293 1.21 rillig "0x1<once,again>");
294 1.21 rillig
295 1.21 rillig // old style, non-printable description
296 1.21 rillig //
297 1.21 rillig // The characters ' ' and '\t' are interpreted as bit numbers,
298 1.21 rillig // not as part of the description; the visual arrangement is
299 1.21 rillig // misleading.
300 1.21 rillig h_snprintb(
301 1.21 rillig "\020"
302 1.21 rillig "\001least significant"
303 1.28 rillig "\002horizontal\ttab"
304 1.28 rillig "\003\xC3\xA4",
305 1.21 rillig 0xff,
306 1.28 rillig "0xff<least,horizontal,\xC3\xA4>");
307 1.21 rillig
308 1.21 rillig // old style, empty description
309 1.21 rillig //
310 1.21 rillig // Empty descriptions result in multiple commas in a row, which is a
311 1.21 rillig // mistake.
312 1.21 rillig h_snprintb(
313 1.21 rillig "\020"
314 1.21 rillig "\001lsb"
315 1.21 rillig "\004"
316 1.21 rillig "\005"
317 1.21 rillig "\010msb",
318 1.21 rillig 0xff,
319 1.21 rillig "0xff<lsb,,,msb>");
320 1.21 rillig
321 1.21 rillig // old style, buffer size 0
322 1.21 rillig //
323 1.21 rillig // With the buffer size being 0, the buffer is not modified at all.
324 1.10 rillig h_snprintb_len(
325 1.10 rillig 0, "\020", 0,
326 1.16 rillig 1, "");
327 1.21 rillig
328 1.27 rillig // old style, buffer size 0, null buffer
329 1.27 rillig //
330 1.27 rillig // If the buffer size is 0, the buffer may be NULL.
331 1.27 rillig int null_rv_old = snprintb(NULL, 0, "\020\001lsb", 0x01);
332 1.27 rillig ATF_CHECK_MSG(
333 1.27 rillig null_rv_old == 8,
334 1.27 rillig "want length 8, have %d", null_rv_old);
335 1.27 rillig
336 1.21 rillig // old style, buffer too small for value
337 1.10 rillig h_snprintb_len(
338 1.10 rillig 1, "\020", 0,
339 1.16 rillig 1, "");
340 1.21 rillig
341 1.21 rillig // old style, buffer large enough for zero value
342 1.10 rillig h_snprintb_len(
343 1.10 rillig 2, "\020", 0,
344 1.16 rillig 1, "0");
345 1.21 rillig
346 1.21 rillig // old style, buffer larger than necessary for zero value
347 1.10 rillig h_snprintb_len(
348 1.10 rillig 3, "\020", 0,
349 1.16 rillig 1, "0");
350 1.21 rillig
351 1.21 rillig // old style, buffer too small for nonzero value
352 1.10 rillig h_snprintb_len(
353 1.10 rillig 3, "\020", 7,
354 1.16 rillig 3, "0x");
355 1.21 rillig
356 1.21 rillig // old style, buffer large enough for nonzero value
357 1.10 rillig h_snprintb_len(
358 1.10 rillig 4, "\020", 7,
359 1.16 rillig 3, "0x7");
360 1.21 rillig
361 1.21 rillig // old style, buffer too small for '<'
362 1.21 rillig h_snprintb_len(
363 1.21 rillig 4, "\020\001lsb", 7,
364 1.21 rillig 8, "0x7");
365 1.21 rillig
366 1.21 rillig // old style, buffer too small for description
367 1.10 rillig h_snprintb_len(
368 1.10 rillig 7, "\020\001lsb", 7,
369 1.16 rillig 8, "0x7<ls");
370 1.21 rillig
371 1.21 rillig // old style, buffer too small for '>'
372 1.10 rillig h_snprintb_len(
373 1.10 rillig 8, "\020\001lsb", 7,
374 1.16 rillig 8, "0x7<lsb");
375 1.21 rillig
376 1.21 rillig // old style, buffer large enough for '<'
377 1.10 rillig h_snprintb_len(
378 1.10 rillig 9, "\020\001lsb", 7,
379 1.16 rillig 8, "0x7<lsb>");
380 1.21 rillig
381 1.21 rillig // old style, buffer too small for second description
382 1.10 rillig h_snprintb_len(
383 1.10 rillig 9, "\020\001one\002two", 7,
384 1.16 rillig 12, "0x7<one,");
385 1.21 rillig
386 1.21 rillig // old style, buffer too small for second description
387 1.10 rillig h_snprintb_len(
388 1.10 rillig 10, "\020\001one\002two", 7,
389 1.16 rillig 12, "0x7<one,t");
390 1.21 rillig
391 1.21 rillig // old style, buffer too small for '>' after second description
392 1.10 rillig h_snprintb_len(
393 1.10 rillig 12, "\020\001one\002two", 7,
394 1.16 rillig 12, "0x7<one,two");
395 1.21 rillig
396 1.21 rillig // old style, buffer large enough for '>' after second description
397 1.10 rillig h_snprintb_len(
398 1.10 rillig 13, "\020\001one\002two", 7,
399 1.16 rillig 12, "0x7<one,two>");
400 1.10 rillig
401 1.27 rillig // new style, buffer size 0, null buffer
402 1.27 rillig //
403 1.27 rillig // If the buffer size is 0, the buffer may be NULL.
404 1.27 rillig int null_rv_new = snprintb(NULL, 0, "\177\020b\000lsb\0", 0x01);
405 1.27 rillig ATF_CHECK_MSG(
406 1.27 rillig null_rv_new == 8,
407 1.27 rillig "want length 8, have %d", null_rv_new);
408 1.27 rillig
409 1.21 rillig // new style single bits
410 1.10 rillig h_snprintb(
411 1.21 rillig "\177\020"
412 1.21 rillig "b\000lsb\0"
413 1.21 rillig "b\001above-lsb\0"
414 1.10 rillig "b\037bit31\0"
415 1.10 rillig "b\040bit32\0"
416 1.21 rillig "b\076below-msb\0"
417 1.21 rillig "b\077msb\0",
418 1.21 rillig 0x8000000180000001,
419 1.21 rillig "0x8000000180000001<lsb,bit31,bit32,msb>");
420 1.10 rillig
421 1.21 rillig // new style single bits, duplicate bits
422 1.10 rillig h_snprintb(
423 1.21 rillig "\177\020"
424 1.21 rillig "b\000lsb\0"
425 1.21 rillig "b\000lsb\0"
426 1.21 rillig "b\000lsb\0",
427 1.21 rillig 0xff,
428 1.21 rillig "0xff<lsb,lsb,lsb>");
429 1.9 rillig
430 1.21 rillig // new style single bits, empty description
431 1.10 rillig h_snprintb(
432 1.10 rillig "\177\020"
433 1.21 rillig "b\000lsb\0"
434 1.21 rillig "b\001\0"
435 1.21 rillig "b\002\0"
436 1.21 rillig "b\007msb\0"
437 1.21 rillig ,
438 1.21 rillig 0xff,
439 1.21 rillig "0xff<lsb,,,msb>");
440 1.10 rillig
441 1.26 rillig // new style single bits, bit number too large
442 1.10 rillig h_snprintb_error(
443 1.21 rillig "\177\020"
444 1.27 rillig "b\100too-high\0",
445 1.27 rillig "0#");
446 1.10 rillig h_snprintb_error(
447 1.21 rillig "\177\020"
448 1.27 rillig "b\377too-high\0",
449 1.27 rillig "0#");
450 1.10 rillig
451 1.21 rillig // new style single bits, non-printable description
452 1.10 rillig //
453 1.21 rillig // Contrary to the old-style format, the new-style format allows
454 1.21 rillig // arbitrary characters in the description, even control characters
455 1.21 rillig // and non-ASCII characters.
456 1.21 rillig h_snprintb(
457 1.21 rillig "\177\020"
458 1.21 rillig "b\000space \t \xC3\xA4\0",
459 1.21 rillig 0x1,
460 1.21 rillig "0x1<space \t \xC3\xA4>");
461 1.10 rillig
462 1.21 rillig // new style named bit-field, octal
463 1.21 rillig //
464 1.21 rillig // The bit-field value gets a leading '0' iff it is nonzero.
465 1.10 rillig h_snprintb(
466 1.10 rillig "\177\010"
467 1.21 rillig "f\000\010byte0\0"
468 1.21 rillig "f\010\010byte1\0",
469 1.21 rillig 0x0100,
470 1.21 rillig "0400<byte0=0,byte1=01>");
471 1.10 rillig
472 1.21 rillig // new style named bit-field, decimal
473 1.10 rillig h_snprintb(
474 1.10 rillig "\177\012"
475 1.21 rillig "f\000\010byte0\0"
476 1.21 rillig "f\010\010byte1\0",
477 1.21 rillig 0x0100,
478 1.21 rillig "256<byte0=0,byte1=1>");
479 1.21 rillig
480 1.21 rillig // new style named bit-field, hexadecimal
481 1.21 rillig h_snprintb(
482 1.21 rillig "\177\020"
483 1.21 rillig "f\000\010byte0\0"
484 1.21 rillig "f\010\010byte1\0",
485 1.21 rillig 0x0100,
486 1.21 rillig "0x100<byte0=0,byte1=0x1>");
487 1.21 rillig
488 1.21 rillig // new style bit-field, from 0 width 0
489 1.21 rillig h_snprintb(
490 1.21 rillig "\177\020"
491 1.21 rillig "f\000\000zero-width\0"
492 1.21 rillig "=\000zero\0",
493 1.21 rillig 0xffff,
494 1.21 rillig "0xffff<zero-width=0=zero>");
495 1.21 rillig
496 1.21 rillig // new style bit-field, from 0 width 1
497 1.21 rillig h_snprintb(
498 1.21 rillig "\177\020"
499 1.21 rillig "f\000\001lsb\0"
500 1.21 rillig "=\000zero\0"
501 1.21 rillig "=\001one\0",
502 1.21 rillig 0x0,
503 1.21 rillig "0<lsb=0=zero>");
504 1.21 rillig h_snprintb(
505 1.21 rillig "\177\020"
506 1.21 rillig "f\000\001lsb\0"
507 1.21 rillig "=\000zero\0"
508 1.21 rillig "=\001one\0",
509 1.21 rillig 0x1,
510 1.21 rillig "0x1<lsb=0x1=one>");
511 1.21 rillig
512 1.21 rillig // new style bit-field, from 0 width 63
513 1.21 rillig h_snprintb(
514 1.21 rillig "\177\020"
515 1.21 rillig "f\000\077uint63\0"
516 1.21 rillig "=\125match\0",
517 1.21 rillig 0xaaaa5555aaaa5555,
518 1.21 rillig "0xaaaa5555aaaa5555<uint63=0x2aaa5555aaaa5555>");
519 1.21 rillig
520 1.21 rillig // new style bit-field, from 0 width 64
521 1.21 rillig h_snprintb(
522 1.21 rillig "\177\020"
523 1.21 rillig "f\000\100uint64\0"
524 1.21 rillig "=\125match\0",
525 1.21 rillig 0xaaaa5555aaaa5555,
526 1.21 rillig "0xaaaa5555aaaa5555<uint64=0xaaaa5555aaaa5555>");
527 1.21 rillig
528 1.21 rillig // new style bit-field, from 0 width 65
529 1.21 rillig h_snprintb_error(
530 1.21 rillig "\177\020"
531 1.27 rillig "f\000\101uint65\0",
532 1.27 rillig "0#");
533 1.10 rillig
534 1.21 rillig // new style bit-field, from 1 width 8
535 1.10 rillig h_snprintb(
536 1.10 rillig "\177\020"
537 1.21 rillig "f\001\010uint8\0"
538 1.21 rillig "=\203match\0",
539 1.21 rillig 0x0106,
540 1.21 rillig "0x106<uint8=0x83=match>");
541 1.10 rillig
542 1.21 rillig // new style bit-field, from 1 width 9
543 1.21 rillig //
544 1.21 rillig // The '=' and ':' directives can only match a bit-field value between
545 1.21 rillig // 0 and 255, independent of the bit-field's width.
546 1.10 rillig h_snprintb(
547 1.21 rillig "\177\020"
548 1.21 rillig "f\001\011uint9\0"
549 1.21 rillig "=\203match\0"
550 1.21 rillig "*=other-f\0"
551 1.21 rillig "F\001\011\0"
552 1.21 rillig ":\203match\0"
553 1.21 rillig "*other-F\0",
554 1.21 rillig 0x0306,
555 1.21 rillig "0x306<uint9=0x183=other-f,other-F>");
556 1.10 rillig
557 1.21 rillig // new style bit-field, from 32 width 32
558 1.10 rillig h_snprintb(
559 1.21 rillig "\177\020"
560 1.21 rillig "f\040\040uint32\0",
561 1.21 rillig 0xaaaa555500000000,
562 1.21 rillig "0xaaaa555500000000<uint32=0xaaaa5555>");
563 1.9 rillig
564 1.21 rillig // new style bit-field, from 60 width 4
565 1.9 rillig h_snprintb(
566 1.10 rillig "\177\020"
567 1.21 rillig "f\074\004uint4\0",
568 1.21 rillig 0xf555555555555555,
569 1.21 rillig "0xf555555555555555<uint4=0xf>");
570 1.10 rillig
571 1.21 rillig // new style bit-field, from 60 width 5
572 1.10 rillig //
573 1.21 rillig // The end of the bit-field is out of bounds.
574 1.10 rillig h_snprintb(
575 1.21 rillig "\177\020"
576 1.21 rillig "f\074\005uint5\0",
577 1.21 rillig 0xf555555555555555,
578 1.21 rillig "0xf555555555555555<uint5=0xf>");
579 1.21 rillig
580 1.21 rillig // new style bit-field, from 64 width 0
581 1.21 rillig //
582 1.21 rillig // The beginning of the bit-field is out of bounds, the end is fine.
583 1.21 rillig h_snprintb_error(
584 1.21 rillig "\177\020"
585 1.27 rillig "f\100\000uint0\0",
586 1.27 rillig "0#");
587 1.21 rillig
588 1.21 rillig // new style bit-field, from 65 width 0
589 1.21 rillig //
590 1.21 rillig // The beginning and end of the bit-field are out of bounds.
591 1.21 rillig h_snprintb_error(
592 1.21 rillig "\177\020"
593 1.27 rillig "f\101\000uint0\0",
594 1.27 rillig "0#");
595 1.10 rillig
596 1.21 rillig // new style bit-field, empty field description
597 1.10 rillig //
598 1.21 rillig // The description of a field may be empty, though this is probably a
599 1.21 rillig // mistake, as it outputs an isolated '='.
600 1.10 rillig h_snprintb(
601 1.21 rillig "\177\020"
602 1.21 rillig "f\000\004\0"
603 1.21 rillig "=\001one\0",
604 1.21 rillig 0x1,
605 1.21 rillig "0x1<=0x1=one>");
606 1.10 rillig
607 1.21 rillig // new style bit-field, non-printable description
608 1.10 rillig //
609 1.21 rillig // Contrary to the old-style format, the new-style format allows
610 1.21 rillig // arbitrary characters in the description, even control characters
611 1.21 rillig // and non-ASCII characters.
612 1.9 rillig h_snprintb(
613 1.10 rillig "\177\020"
614 1.21 rillig "f\000\010\t \xC3\xA4\0"
615 1.21 rillig "=\001\t \xC3\xA4\0"
616 1.21 rillig "F\000\010\0"
617 1.21 rillig ":\001\t \xC3\xA4\0"
618 1.21 rillig "F\000\010\0"
619 1.21 rillig "*\t \xC3\xA4\0",
620 1.21 rillig 0x1,
621 1.21 rillig "0x1<\t \xC3\xA4=0x1=\t \xC3\xA4,\t \xC3\xA4,\t \xC3\xA4>");
622 1.5 ryo
623 1.21 rillig // new style bit-field, '=' with empty description
624 1.21 rillig //
625 1.21 rillig // The description of a '=' directive may be empty, though this is
626 1.21 rillig // probably a mistake, as it outputs several '=' in a row.
627 1.9 rillig h_snprintb(
628 1.10 rillig "\177\020"
629 1.21 rillig "f\000\004f\0"
630 1.21 rillig "=\001one\0"
631 1.21 rillig "=\001\0"
632 1.21 rillig "=\001\0",
633 1.21 rillig 0x1,
634 1.21 rillig "0x1<f=0x1=one==>");
635 1.10 rillig
636 1.21 rillig // new style bit-field, 'F' followed by ':' with empty description
637 1.10 rillig //
638 1.21 rillig // The description of a ':' directive may be empty, though this is
639 1.21 rillig // probably a mistake, as it leads to empty angle brackets.
640 1.9 rillig h_snprintb(
641 1.9 rillig "\177\020"
642 1.21 rillig "F\000\004\0"
643 1.21 rillig ":\001\0"
644 1.21 rillig "*default\0",
645 1.21 rillig 0x1,
646 1.21 rillig "0x1<>");
647 1.6 kre
648 1.21 rillig // new style bit-field, 'F', ':' with empty description, '*'
649 1.21 rillig //
650 1.21 rillig // The ':' directive could be used to suppress a following '*'
651 1.21 rillig // directive, but this combination is probably a mistake, as a
652 1.21 rillig // matching ':' leads to empty angle brackets.
653 1.17 rillig h_snprintb(
654 1.17 rillig "\177\020"
655 1.21 rillig "F\000\004\0"
656 1.21 rillig ":\001\0"
657 1.21 rillig "*default\0",
658 1.21 rillig 0x2,
659 1.21 rillig "0x2<default>");
660 1.17 rillig
661 1.21 rillig // new style bit-field, 'f' with non-exhaustive '='
662 1.9 rillig h_snprintb(
663 1.10 rillig "\177\020"
664 1.21 rillig "f\000\004Field\0"
665 1.10 rillig "=\1one\0"
666 1.10 rillig "=\2two\0",
667 1.21 rillig 0x3,
668 1.21 rillig "0x3<Field=0x3>");
669 1.21 rillig
670 1.21 rillig // new style bit-field, 'F' with non-exhaustive ':'
671 1.21 rillig //
672 1.21 rillig // A bit-field that does not match any values still generates empty
673 1.21 rillig // angle brackets.
674 1.9 rillig h_snprintb(
675 1.10 rillig "\177\020"
676 1.21 rillig "F\000\004\0"
677 1.10 rillig ":\1one\0"
678 1.10 rillig ":\2two\0",
679 1.21 rillig 0x3,
680 1.21 rillig "0x3<>");
681 1.21 rillig
682 1.21 rillig // new style bit-field, 'F' with non-exhaustive ':'
683 1.21 rillig //
684 1.21 rillig // A bit-field that does not match any values still generates empty
685 1.21 rillig // angle brackets or adjacent commas.
686 1.21 rillig h_snprintb(
687 1.21 rillig "\177\020"
688 1.21 rillig "b\000bit0\0"
689 1.21 rillig "F\000\004\0"
690 1.21 rillig ":\1one\0"
691 1.21 rillig ":\2two\0"
692 1.21 rillig "b\001bit1\0",
693 1.21 rillig 0x3,
694 1.21 rillig "0x3<bit0,,bit1>");
695 1.21 rillig
696 1.25 rillig // new style bit-field, '=', can never match
697 1.25 rillig h_snprintb(
698 1.25 rillig "\177\020"
699 1.25 rillig "f\000\007f\0"
700 1.25 rillig "=\200never\0"
701 1.25 rillig "=\377never\0",
702 1.25 rillig 0xff,
703 1.25 rillig "0xff<f=0x7f>");
704 1.25 rillig
705 1.21 rillig // new style, two separate bit-fields
706 1.9 rillig h_snprintb(
707 1.9 rillig "\177\020"
708 1.21 rillig "f\000\004f1\0"
709 1.21 rillig "=\001one\0"
710 1.21 rillig "=\002two\0"
711 1.21 rillig "f\004\004f2\0"
712 1.21 rillig "=\001one\0"
713 1.21 rillig "=\002two\0",
714 1.21 rillig 0x12,
715 1.21 rillig "0x12<f1=0x2=two,f2=0x1=one>");
716 1.21 rillig
717 1.21 rillig // new style, mixed named and unnamed bit-fields
718 1.21 rillig h_snprintb(
719 1.21 rillig "\177\020"
720 1.21 rillig "f\000\004f1\0"
721 1.21 rillig "=\001one\0"
722 1.21 rillig "=\002two\0"
723 1.10 rillig "F\010\004\0"
724 1.21 rillig ":\015thirteen\0"
725 1.21 rillig "f\004\004f2\0"
726 1.21 rillig "=\001one\0"
727 1.21 rillig "=\002two\0",
728 1.21 rillig 0x0d12,
729 1.21 rillig "0xd12<f1=0x2=two,thirteen,f2=0x1=one>");
730 1.21 rillig
731 1.21 rillig // new style bit-field, overlapping
732 1.21 rillig h_snprintb(
733 1.21 rillig "\177\020"
734 1.21 rillig "f\000\004lo\0"
735 1.21 rillig "f\002\004mid\0"
736 1.21 rillig "f\004\004hi\0"
737 1.21 rillig "f\000\010all\0",
738 1.21 rillig 0x18,
739 1.21 rillig "0x18<lo=0x8,mid=0x6,hi=0x1,all=0x18>");
740 1.21 rillig
741 1.21 rillig // new style bit-field, difference between '=' and ':'
742 1.21 rillig //
743 1.21 rillig // The ':' directive can almost emulate the '=' directive, without the
744 1.21 rillig // numeric output and with a different separator. It's best to use
745 1.21 rillig // either 'f' with '=' or 'F' with ':', but not mix them.
746 1.21 rillig h_snprintb(
747 1.21 rillig "\177\020"
748 1.21 rillig "f\000\004field\0"
749 1.21 rillig "=\010value\0"
750 1.21 rillig "F\000\000\0"
751 1.21 rillig ":\000field\0" // Since the description of 'F' is ignored.
752 1.21 rillig "F\000\004\0"
753 1.21 rillig ":\010value\0",
754 1.21 rillig 0x18,
755 1.21 rillig "0x18<field=0x8=value,field,value>");
756 1.21 rillig
757 1.21 rillig // new style bit-field default, fixed string
758 1.21 rillig //
759 1.21 rillig // The 'f' directive pairs up with the '=' directive,
760 1.21 rillig // the 'F' directive pairs up with the ':' directive,
761 1.21 rillig // but there's only one 'default' directive for both variants,
762 1.21 rillig // so its description should include the '=' when used with 'f' but
763 1.21 rillig // not with 'F'.
764 1.21 rillig h_snprintb(
765 1.21 rillig "\177\020"
766 1.21 rillig "f\030\010f1\0"
767 1.21 rillig "*default\0"
768 1.21 rillig "f\020\010f2\0"
769 1.21 rillig "*=default\0"
770 1.21 rillig "F\010\010\0"
771 1.21 rillig "*default\0"
772 1.21 rillig "F\010\010\0"
773 1.21 rillig "*=default\0",
774 1.21 rillig 0x11223344,
775 1.21 rillig "0x11223344<f1=0x11default,f2=0x22=default,default,=default>");
776 1.21 rillig
777 1.21 rillig // new style bit-field default, numeric conversion specifier
778 1.21 rillig h_snprintb(
779 1.21 rillig "\177\020"
780 1.21 rillig "f\010\010f\0"
781 1.21 rillig "*=f(%ju)\0"
782 1.21 rillig "F\000\010F\0"
783 1.21 rillig "*F(%ju)\0",
784 1.21 rillig 0x1122,
785 1.21 rillig "0x1122<f=0x11=f(17),F(34)>");
786 1.21 rillig
787 1.25 rillig // new style bit-field default, can never match
788 1.25 rillig h_snprintb(
789 1.25 rillig "\177\020"
790 1.25 rillig "f\010\002f\0"
791 1.25 rillig "=\000zero\0"
792 1.25 rillig "=\001one\0"
793 1.25 rillig "=\002two\0"
794 1.25 rillig "=\003three\0"
795 1.25 rillig "*other\0",
796 1.25 rillig 0xff00,
797 1.25 rillig "0xff00<f=0x3=three>");
798 1.25 rillig
799 1.21 rillig // new style bit-field default, invalid conversion specifier
800 1.21 rillig //
801 1.21 rillig // There is no reliable way to make snprintf return an error, as such
802 1.21 rillig // errors are defined as undefined behavior in the C standard.
803 1.21 rillig // Instead, here's a conversion specifier that produces a literal '%'.
804 1.21 rillig h_snprintb(
805 1.21 rillig "\177\020"
806 1.21 rillig "f\000\010f\0"
807 1.21 rillig "*=%030ju%%\0",
808 1.21 rillig 0xff,
809 1.21 rillig "0xff<f=0xff=000000000000000000000000000255%>");
810 1.21 rillig
811 1.21 rillig // new style unknown directive
812 1.21 rillig //
813 1.21 rillig // Unknown directives are assumed to have a single byte argument
814 1.21 rillig // followed by a description; they are skipped up to the next '\0'.
815 1.21 rillig h_snprintb(
816 1.21 rillig "\177\020"
817 1.21 rillig "c\010ignored\0"
818 1.21 rillig "c\000b\0"
819 1.21 rillig "lsb\0"
820 1.21 rillig "b\007msb\0",
821 1.21 rillig 0xff,
822 1.21 rillig "0xff<msb>");
823 1.21 rillig
824 1.21 rillig // new style combinations, 'b' '='
825 1.21 rillig //
826 1.21 rillig // A '=' directive without a preceding 'f' or 'F' directive applies to
827 1.21 rillig // the whole value; its description may appear inside or outside the
828 1.21 rillig // angle brackets. Having such a format is likely an error.
829 1.21 rillig h_snprintb(
830 1.21 rillig "\177\020"
831 1.21 rillig "b\004bit4\0"
832 1.21 rillig "=\000clear\0"
833 1.21 rillig "=\001set\0"
834 1.21 rillig "=\245complete\0"
835 1.21 rillig "b\000bit0\0"
836 1.21 rillig "=\000clear\0"
837 1.21 rillig "=\001set\0"
838 1.21 rillig "=\245complete\0",
839 1.21 rillig 0xa5,
840 1.21 rillig "0xa5=complete<bit0=complete>");
841 1.21 rillig
842 1.21 rillig // new style combinations, 'b' ':'
843 1.21 rillig //
844 1.21 rillig // A ':' directive without a preceding 'f' or 'F' directive applies to
845 1.21 rillig // the whole value; its description may appear inside or outside the
846 1.21 rillig // angle brackets. Having such a format is likely an error.
847 1.21 rillig h_snprintb(
848 1.21 rillig "\177\020"
849 1.21 rillig "b\004bit4\0"
850 1.21 rillig ":\000clear\0"
851 1.21 rillig ":\001set\0"
852 1.21 rillig ":\245complete\0"
853 1.21 rillig "b\000bit0\0"
854 1.21 rillig ":\000clear\0"
855 1.21 rillig ":\001set\0"
856 1.21 rillig ":\245complete\0",
857 1.21 rillig 0xa5,
858 1.21 rillig "0xa5complete<bit0complete>");
859 1.21 rillig
860 1.21 rillig // new style combinations, 'b' '*'
861 1.21 rillig //
862 1.21 rillig // A '*' directive without a preceding 'f' or 'F' directive is ignored.
863 1.21 rillig h_snprintb(
864 1.21 rillig "\177\020"
865 1.21 rillig "b\004bit4\0"
866 1.21 rillig "*default(%ju)\0"
867 1.21 rillig "b\000bit0\0"
868 1.21 rillig "*default(%ju)\0",
869 1.21 rillig 0xa5,
870 1.21 rillig "0xa5<bit0>");
871 1.21 rillig
872 1.21 rillig // new style combinations, 'f' 'b' '='
873 1.21 rillig //
874 1.21 rillig // Between an 'f' and an '=' directive, there may be unrelated 'b'
875 1.21 rillig // directives, they do not affect the value of the "previous field".
876 1.21 rillig // Formats like these are probably mistakes.
877 1.21 rillig h_snprintb(
878 1.21 rillig "\177\020"
879 1.21 rillig "f\000\010f\0"
880 1.21 rillig "b\005bit5\0"
881 1.21 rillig "=\xa5match\0",
882 1.21 rillig 0xa5,
883 1.21 rillig "0xa5<f=0xa5,bit5=match>");
884 1.21 rillig
885 1.21 rillig // new style combinations, 'f' 'b' ':'
886 1.21 rillig //
887 1.21 rillig // Between an 'f' and a ':' directive, there may be unrelated 'b'
888 1.21 rillig // directives, they do not affect the value of the "previous field".
889 1.21 rillig // Formats like these are mistakes, as the output is garbled.
890 1.21 rillig h_snprintb(
891 1.21 rillig "\177\020"
892 1.21 rillig "f\000\010f\0"
893 1.21 rillig "b\005bit5\0"
894 1.21 rillig ":\xa5match\0",
895 1.21 rillig 0xa5,
896 1.21 rillig "0xa5<f=0xa5,bit5match>");
897 1.21 rillig
898 1.21 rillig // new style combinations, 'f' ':'
899 1.21 rillig h_snprintb(
900 1.21 rillig "\177\20"
901 1.21 rillig "f\000\004nibble\0"
902 1.21 rillig ":\001one\0",
903 1.21 rillig 0x01,
904 1.21 rillig "0x1<nibble=0x1one>");
905 1.6 kre
906 1.21 rillig // new style combinations, 'F' '='
907 1.21 rillig //
908 1.21 rillig // Combining the 'F' and '=' directives outputs an isolated '=', which
909 1.21 rillig // doesn't look well-formed.
910 1.9 rillig h_snprintb(
911 1.9 rillig "\177\20"
912 1.21 rillig "F\000\004\0"
913 1.21 rillig "=\001one\0",
914 1.21 rillig 0x01,
915 1.21 rillig "0x1<=one>");
916 1.21 rillig
917 1.21 rillig // new style combinations, '='
918 1.21 rillig //
919 1.21 rillig // A '=' directive without a preceding 'f' or 'F' directive matches on
920 1.21 rillig // the complete value. This is not documented in the manual page, and
921 1.21 rillig // formats like these are probably mistakes.
922 1.21 rillig h_snprintb(
923 1.21 rillig "\177\020"
924 1.21 rillig "=\xa5match\0",
925 1.21 rillig 0xa5,
926 1.21 rillig "0xa5=match");
927 1.21 rillig
928 1.21 rillig // new style combinations, ':'
929 1.21 rillig //
930 1.21 rillig // A ':' directive without a preceding 'f' or 'F' directive matches on
931 1.21 rillig // the complete value. This is not documented in the manual page, and
932 1.21 rillig // formats like these are probably mistakes.
933 1.21 rillig h_snprintb(
934 1.21 rillig "\177\020"
935 1.21 rillig ":\xa5match\0",
936 1.21 rillig 0xa5,
937 1.21 rillig "0xa5match");
938 1.21 rillig
939 1.21 rillig // new style combinations, '*'
940 1.21 rillig //
941 1.21 rillig // A '*' directive without a preceding 'f' or 'F' is skipped. Formats
942 1.21 rillig // like these are mistakes.
943 1.21 rillig h_snprintb(
944 1.21 rillig "\177\020"
945 1.21 rillig "*match\0",
946 1.21 rillig 0xa5,
947 1.21 rillig "0xa5");
948 1.21 rillig
949 1.21 rillig // new style combinations, 'f' '*' '='
950 1.21 rillig //
951 1.21 rillig // A '*' directive may be followed by a '=' directive. Formats like
952 1.21 rillig // this are probably a mistake.
953 1.21 rillig h_snprintb(
954 1.21 rillig "\177\020"
955 1.21 rillig "f\000\010f\0"
956 1.21 rillig "*=default\0"
957 1.21 rillig "=\xa5match\0",
958 1.21 rillig 0xa5,
959 1.21 rillig "0xa5<f=0xa5=default=match>");
960 1.21 rillig
961 1.21 rillig // new style combinations, 'F' '*' ':'
962 1.21 rillig //
963 1.21 rillig // A '*' directive may be followed by a ':' directive. Formats like
964 1.21 rillig // this are probably a mistake.
965 1.21 rillig h_snprintb(
966 1.21 rillig "\177\020"
967 1.21 rillig "F\000\010F\0"
968 1.21 rillig "*default\0"
969 1.21 rillig ":\xa5-match\0",
970 1.21 rillig 0xa5,
971 1.21 rillig "0xa5<default-match>");
972 1.21 rillig
973 1.21 rillig // new style combinations, '*' '*'
974 1.21 rillig //
975 1.21 rillig // The first '*' directive matches everything, so the second '*'
976 1.21 rillig // directive cannot match anything and is thus redundant. Formats like
977 1.21 rillig // this are a mistake.
978 1.21 rillig h_snprintb(
979 1.21 rillig "\177\020"
980 1.21 rillig "f\000\010f\0"
981 1.21 rillig "*=default-f\0"
982 1.21 rillig "*ignored\0"
983 1.21 rillig "F\000\010\0"
984 1.21 rillig "*default-F\0"
985 1.21 rillig "*ignored\0",
986 1.21 rillig 0xa5,
987 1.21 rillig "0xa5<f=0xa5=default-f,default-F>");
988 1.21 rillig
989 1.21 rillig // manual page, old style octal
990 1.21 rillig h_snprintb(
991 1.21 rillig "\10\2BITTWO\1BITONE",
992 1.21 rillig 3,
993 1.21 rillig "03<BITTWO,BITONE>");
994 1.21 rillig
995 1.21 rillig // manual page, old style hexadecimal
996 1.21 rillig h_snprintb(
997 1.21 rillig "\20"
998 1.21 rillig "\x10NOTBOOT" "\x0f""FPP" "\x0eSDVMA"
999 1.21 rillig "\x0cVIDEO" "\x0bLORES" "\x0a""FPA" "\x09""DIAG"
1000 1.21 rillig "\x07""CACHE" "\x06IOCACHE" "\x05LOOPBACK"
1001 1.21 rillig "\x04""DBGCACHE",
1002 1.21 rillig 0xe860,
1003 1.21 rillig "0xe860<NOTBOOT,FPP,SDVMA,VIDEO,CACHE,IOCACHE>");
1004 1.21 rillig
1005 1.21 rillig // manual page, new style bits and fields
1006 1.21 rillig h_snprintb(
1007 1.21 rillig "\177\020"
1008 1.21 rillig "b\0LSB\0" "b\1BITONE\0"
1009 1.21 rillig "f\4\4NIBBLE2\0"
1010 1.21 rillig "f\x10\4BURST\0" "=\4FOUR\0" "=\xf""FIFTEEN\0"
1011 1.21 rillig "b\x1fMSB\0",
1012 1.21 rillig 0x800f0701,
1013 1.21 rillig "0x800f0701<LSB,NIBBLE2=0,BURST=0xf=FIFTEEN,MSB>");
1014 1.6 kre
1015 1.21 rillig // manual page, new style mmap
1016 1.21 rillig #define MAP_FMT \
1017 1.21 rillig "\177\020" \
1018 1.21 rillig "b\0" "SHARED\0" \
1019 1.21 rillig "b\1" "PRIVATE\0" \
1020 1.21 rillig "b\2" "COPY\0" \
1021 1.21 rillig "b\4" "FIXED\0" \
1022 1.21 rillig "b\5" "RENAME\0" \
1023 1.21 rillig "b\6" "NORESERVE\0" \
1024 1.21 rillig "b\7" "INHERIT\0" \
1025 1.21 rillig "b\11" "HASSEMAPHORE\0" \
1026 1.21 rillig "b\12" "TRYFIXED\0" \
1027 1.21 rillig "b\13" "WIRED\0" \
1028 1.21 rillig "F\14\1\0" \
1029 1.21 rillig ":\0" "FILE\0" \
1030 1.21 rillig ":\1" "ANONYMOUS\0" \
1031 1.21 rillig "b\15" "STACK\0" \
1032 1.21 rillig "F\30\010\0" \
1033 1.21 rillig ":\000" "ALIGN=NONE\0" \
1034 1.21 rillig ":\015" "ALIGN=8KB\0" \
1035 1.21 rillig "*" "ALIGN=2^%ju\0"
1036 1.21 rillig h_snprintb(
1037 1.21 rillig MAP_FMT,
1038 1.21 rillig 0x0d001234,
1039 1.21 rillig "0xd001234<COPY,FIXED,RENAME,HASSEMAPHORE,ANONYMOUS,ALIGN=8KB>");
1040 1.21 rillig h_snprintb(
1041 1.21 rillig MAP_FMT,
1042 1.21 rillig 0x2e000000,
1043 1.21 rillig "0x2e000000<FILE,ALIGN=2^46>");
1044 1.10 rillig
1045 1.9 rillig // It is possible but cumbersome to implement a reduced variant of
1046 1.9 rillig // rot13 using snprintb, shown here for lowercase letters only.
1047 1.9 rillig for (char ch = 'A'; ch <= '~'; ch++) {
1048 1.9 rillig char rot13 = ch >= 'a' && ch <= 'm' ? ch + 13
1049 1.9 rillig : ch >= 'n' && ch <= 'z' ? ch - 13
1050 1.9 rillig : '?';
1051 1.9 rillig char expected[8];
1052 1.9 rillig ATF_REQUIRE_EQ(7,
1053 1.9 rillig snprintf(expected, sizeof(expected), "%#x<%c>", ch, rot13));
1054 1.9 rillig h_snprintb(
1055 1.9 rillig "\177\020"
1056 1.9 rillig "F\000\010\0"
1057 1.9 rillig ":an\0:bo\0:cp\0:dq\0:er\0:fs\0:gt\0:hu\0"
1058 1.9 rillig ":iv\0:jw\0:kx\0:ly\0:mz\0"
1059 1.9 rillig ":na\0:ob\0:pc\0:qd\0:re\0:sf\0:tg\0:uh\0"
1060 1.9 rillig ":vi\0:wj\0:xk\0:yl\0:zm\0"
1061 1.9 rillig // If snprintf accepted "%jc", it would be possible to
1062 1.9 rillig // echo the non-alphabetic characters instead of a
1063 1.9 rillig // catchall question mark.
1064 1.9 rillig "*?\0",
1065 1.9 rillig ch,
1066 1.9 rillig expected);
1067 1.9 rillig }
1068 1.15 rillig
1069 1.21 rillig // new style, small buffers
1070 1.15 rillig h_snprintb_len(
1071 1.15 rillig 0, "\177\020", 0,
1072 1.16 rillig 1, "");
1073 1.15 rillig h_snprintb_len(
1074 1.15 rillig 1, "\177\020", 0,
1075 1.16 rillig 1, "");
1076 1.15 rillig h_snprintb_len(
1077 1.15 rillig 2, "\177\020", 0,
1078 1.16 rillig 1, "0");
1079 1.15 rillig h_snprintb_len(
1080 1.15 rillig 3, "\177\020", 0,
1081 1.16 rillig 1, "0");
1082 1.15 rillig h_snprintb_len(
1083 1.15 rillig 3, "\177\020", 7,
1084 1.16 rillig 3, "0x");
1085 1.15 rillig h_snprintb_len(
1086 1.15 rillig 4, "\177\020", 7,
1087 1.16 rillig 3, "0x7");
1088 1.15 rillig h_snprintb_len(
1089 1.15 rillig 7, "\177\020b\000lsb\0", 7,
1090 1.16 rillig 8, "0x7<ls");
1091 1.15 rillig h_snprintb_len(
1092 1.15 rillig 8, "\177\020b\000lsb\0", 7,
1093 1.16 rillig 8, "0x7<lsb");
1094 1.15 rillig h_snprintb_len(
1095 1.15 rillig 9, "\177\020b\000lsb\0", 7,
1096 1.16 rillig 8, "0x7<lsb>");
1097 1.15 rillig h_snprintb_len(
1098 1.15 rillig 9, "\177\020b\000one\0b\001two\0", 7,
1099 1.16 rillig 12, "0x7<one,");
1100 1.15 rillig h_snprintb_len(
1101 1.15 rillig 10, "\177\020b\000one\0b\001two\0", 7,
1102 1.16 rillig 12, "0x7<one,t");
1103 1.15 rillig h_snprintb_len(
1104 1.15 rillig 12, "\177\020b\000one\0b\001two\0", 7,
1105 1.16 rillig 12, "0x7<one,two");
1106 1.15 rillig h_snprintb_len(
1107 1.15 rillig 13, "\177\020b\000one\0b\001two\0", 7,
1108 1.16 rillig 12, "0x7<one,two>");
1109 1.1 jmmv }
1110 1.1 jmmv
1111 1.2 pgoyette ATF_TC(snprintb_m);
1112 1.2 pgoyette ATF_TC_HEAD(snprintb_m, tc)
1113 1.2 pgoyette {
1114 1.2 pgoyette atf_tc_set_md_var(tc, "descr", "Checks snprintb_m(3)");
1115 1.2 pgoyette }
1116 1.2 pgoyette ATF_TC_BODY(snprintb_m, tc)
1117 1.2 pgoyette {
1118 1.21 rillig
1119 1.21 rillig // old style, line_max exceeded by number in line 1
1120 1.21 rillig h_snprintb_m(
1121 1.21 rillig "\020",
1122 1.21 rillig 0xff,
1123 1.21 rillig 1,
1124 1.24 rillig "#\0");
1125 1.21 rillig
1126 1.21 rillig // old style, line_max exceeded by '<' in line 1
1127 1.21 rillig h_snprintb_m(
1128 1.27 rillig "\020"
1129 1.27 rillig "\001lsb",
1130 1.21 rillig 0xff,
1131 1.21 rillig 4,
1132 1.27 rillig "0xf#\0");
1133 1.21 rillig
1134 1.27 rillig // old style, line_max exceeded by description
1135 1.21 rillig h_snprintb_m(
1136 1.21 rillig "\020"
1137 1.21 rillig "\001bit1"
1138 1.21 rillig "\002bit2",
1139 1.21 rillig 0xff,
1140 1.27 rillig 7,
1141 1.27 rillig "0xff<b#\0"
1142 1.27 rillig "0xff<b#\0");
1143 1.21 rillig
1144 1.21 rillig // old style, line_max exceeded by '>' in line 1
1145 1.21 rillig h_snprintb_m(
1146 1.13 rillig "\020"
1147 1.13 rillig "\001bit1"
1148 1.21 rillig "\0022",
1149 1.21 rillig 0xff,
1150 1.21 rillig 9,
1151 1.24 rillig "0xff<bit#\0"
1152 1.24 rillig "0xff<2>\0");
1153 1.21 rillig
1154 1.21 rillig // old style, line_max exceeded by description in line 2
1155 1.21 rillig h_snprintb_m(
1156 1.21 rillig "\020"
1157 1.21 rillig "\0011"
1158 1.21 rillig "\002bit2",
1159 1.21 rillig 0xff,
1160 1.21 rillig 8,
1161 1.21 rillig "0xff<1>\0"
1162 1.24 rillig "0xff<bi#\0");
1163 1.21 rillig
1164 1.21 rillig // old style, line_max exceeded by '>' in line 2
1165 1.21 rillig h_snprintb_m(
1166 1.21 rillig "\020"
1167 1.21 rillig "\0011"
1168 1.21 rillig "\002bit2",
1169 1.21 rillig 0xff,
1170 1.21 rillig 9,
1171 1.21 rillig "0xff<1>\0"
1172 1.24 rillig "0xff<bit#\0");
1173 1.21 rillig
1174 1.21 rillig // old style complete
1175 1.21 rillig h_snprintb_m(
1176 1.21 rillig "\020"
1177 1.21 rillig "\0011"
1178 1.21 rillig "\002bit2",
1179 1.21 rillig 0xff,
1180 1.21 rillig 10,
1181 1.21 rillig "0xff<1>\0"
1182 1.21 rillig "0xff<bit2>\0");
1183 1.21 rillig
1184 1.21 rillig // new style, line_max exceeded by value in line 1
1185 1.21 rillig h_snprintb_m(
1186 1.21 rillig "\177\020",
1187 1.21 rillig 0xff,
1188 1.21 rillig 1,
1189 1.24 rillig "#\0");
1190 1.21 rillig
1191 1.21 rillig // new style, line_max exceeded by single-bit '<' in line 1
1192 1.21 rillig h_snprintb_m(
1193 1.21 rillig "\177\020"
1194 1.21 rillig "b\000bit\0",
1195 1.21 rillig 0xff,
1196 1.21 rillig 4,
1197 1.24 rillig "0xf#\0");
1198 1.21 rillig
1199 1.21 rillig // new style, line_max exceeded by single-bit description in line 1
1200 1.21 rillig h_snprintb_m(
1201 1.21 rillig "\177\020"
1202 1.21 rillig "b\000bit0\0"
1203 1.21 rillig "b\001two\0",
1204 1.21 rillig 0xff,
1205 1.21 rillig 8,
1206 1.24 rillig "0xff<bi#\0"
1207 1.24 rillig "0xff<tw#\0");
1208 1.21 rillig
1209 1.21 rillig // new style, line_max exceeded by single-bit '>' in line 1
1210 1.21 rillig h_snprintb_m(
1211 1.21 rillig "\177\020"
1212 1.21 rillig "b\000bit0\0"
1213 1.21 rillig "b\001two\0",
1214 1.21 rillig 0xff,
1215 1.21 rillig 9,
1216 1.24 rillig "0xff<bit#\0"
1217 1.24 rillig "0xff<two>\0");
1218 1.21 rillig
1219 1.21 rillig // new style, line_max exceeded by single-bit description in line 2
1220 1.21 rillig h_snprintb_m(
1221 1.21 rillig "\177\020"
1222 1.21 rillig "b\000one\0"
1223 1.21 rillig "b\001three\0",
1224 1.21 rillig 0xff,
1225 1.21 rillig 9,
1226 1.21 rillig "0xff<one>\0"
1227 1.24 rillig "0xff<thr#\0");
1228 1.21 rillig
1229 1.21 rillig // new style, line_max exceeded by single-bit '>' in line 2
1230 1.21 rillig h_snprintb_m(
1231 1.21 rillig "\177\020"
1232 1.21 rillig "b\000one\0"
1233 1.21 rillig "b\001four\0",
1234 1.21 rillig 0xff,
1235 1.21 rillig 9,
1236 1.21 rillig "0xff<one>\0"
1237 1.24 rillig "0xff<fou#\0");
1238 1.21 rillig
1239 1.21 rillig // new style, single-bit complete
1240 1.21 rillig h_snprintb_m(
1241 1.21 rillig "\177\020"
1242 1.21 rillig "b\000one\0"
1243 1.21 rillig "b\001three\0",
1244 1.21 rillig 0xff,
1245 1.21 rillig 11,
1246 1.21 rillig "0xff<one>\0"
1247 1.21 rillig "0xff<three>\0");
1248 1.21 rillig
1249 1.21 rillig // new style, line_max exceeded by named bit-field number in line 1
1250 1.21 rillig h_snprintb_m(
1251 1.21 rillig "\177\020"
1252 1.21 rillig "f\000\004lo\0",
1253 1.21 rillig 0xff,
1254 1.21 rillig 3,
1255 1.24 rillig "0x#\0");
1256 1.21 rillig
1257 1.21 rillig // new style, line_max exceeded by named bit-field '<' in line 1
1258 1.21 rillig h_snprintb_m(
1259 1.21 rillig "\177\020"
1260 1.21 rillig "f\000\004lo\0",
1261 1.21 rillig 0xff,
1262 1.21 rillig 4,
1263 1.24 rillig "0xf#\0");
1264 1.13 rillig
1265 1.27 rillig // new style, line_max exceeded by named bit-field field description
1266 1.27 rillig // in line 1
1267 1.21 rillig h_snprintb_m(
1268 1.13 rillig "\177\020"
1269 1.21 rillig "f\000\004lo\0",
1270 1.21 rillig 0xff,
1271 1.13 rillig 6,
1272 1.24 rillig "0xff<#\0");
1273 1.16 rillig
1274 1.21 rillig // new style, line_max exceeded by named bit-field '=' in line 1
1275 1.21 rillig h_snprintb_m(
1276 1.21 rillig "\177\020"
1277 1.21 rillig "f\000\004lo\0",
1278 1.21 rillig 0xff,
1279 1.21 rillig 7,
1280 1.24 rillig "0xff<l#\0");
1281 1.16 rillig
1282 1.21 rillig // new style, line_max exceeded by named bit-field value in line 1
1283 1.21 rillig h_snprintb_m(
1284 1.16 rillig "\177\020"
1285 1.21 rillig "f\000\004lo\0",
1286 1.16 rillig 0xff,
1287 1.16 rillig 10,
1288 1.24 rillig "0xff<lo=0#\0");
1289 1.21 rillig
1290 1.21 rillig // new style, line_max exceeded by named bit-field '=' in line 1
1291 1.21 rillig h_snprintb_m(
1292 1.21 rillig "\177\020"
1293 1.21 rillig "f\000\004lo\0"
1294 1.21 rillig "=\017match\0",
1295 1.21 rillig 0xff,
1296 1.21 rillig 11,
1297 1.24 rillig "0xff<lo=0x#\0");
1298 1.21 rillig
1299 1.27 rillig // new style, line_max exceeded by named bit-field value description in
1300 1.27 rillig // line 1
1301 1.21 rillig h_snprintb_m(
1302 1.21 rillig "\177\020"
1303 1.21 rillig "f\000\004lo\0"
1304 1.21 rillig "=\017match\0",
1305 1.21 rillig 0xff,
1306 1.21 rillig 16,
1307 1.24 rillig "0xff<lo=0xf=mat#\0");
1308 1.21 rillig
1309 1.21 rillig // new style, line_max exceeded by named bit-field '>' in line 1
1310 1.21 rillig h_snprintb_m(
1311 1.21 rillig "\177\020"
1312 1.21 rillig "f\000\004lo\0"
1313 1.21 rillig "=\017match\0",
1314 1.21 rillig 0xff,
1315 1.21 rillig 17,
1316 1.24 rillig "0xff<lo=0xf=matc#\0");
1317 1.21 rillig
1318 1.21 rillig // new style, line_max exceeded by named bit-field description in line 2
1319 1.21 rillig h_snprintb_m(
1320 1.21 rillig "\177\020"
1321 1.21 rillig "f\000\004lo\0"
1322 1.21 rillig "f\000\004low-bits\0"
1323 1.21 rillig "=\017match\0",
1324 1.21 rillig 0xff,
1325 1.21 rillig 12,
1326 1.21 rillig "0xff<lo=0xf>\0"
1327 1.24 rillig "0xff<low-bi#\0");
1328 1.21 rillig
1329 1.21 rillig // new style, line_max exceeded by named bit-field '=' in line 2
1330 1.21 rillig h_snprintb_m(
1331 1.21 rillig "\177\020"
1332 1.21 rillig "f\000\004lo\0"
1333 1.21 rillig "f\000\004low-bits\0"
1334 1.21 rillig "=\017match\0",
1335 1.21 rillig 0xff,
1336 1.21 rillig 13,
1337 1.21 rillig "0xff<lo=0xf>\0"
1338 1.24 rillig "0xff<low-bit#\0");
1339 1.21 rillig
1340 1.21 rillig // new style, line_max exceeded by named bit-field value in line 2
1341 1.21 rillig h_snprintb_m(
1342 1.21 rillig "\177\020"
1343 1.21 rillig "f\000\004lo\0"
1344 1.21 rillig "f\000\004low-bits\0"
1345 1.21 rillig "=\017match\0",
1346 1.21 rillig 0xff,
1347 1.21 rillig 16,
1348 1.21 rillig "0xff<lo=0xf>\0"
1349 1.24 rillig "0xff<low-bits=0#\0");
1350 1.21 rillig
1351 1.21 rillig // new style, line_max exceeded by named bit-field '=' in line 2
1352 1.21 rillig h_snprintb_m(
1353 1.21 rillig "\177\020"
1354 1.21 rillig "f\000\004lo\0"
1355 1.21 rillig "f\000\004low-bits\0"
1356 1.21 rillig "=\017match\0",
1357 1.21 rillig 0xff,
1358 1.21 rillig 17,
1359 1.21 rillig "0xff<lo=0xf>\0"
1360 1.24 rillig "0xff<low-bits=0x#\0");
1361 1.21 rillig
1362 1.27 rillig // new style, line_max exceeded by named bit-field value description
1363 1.27 rillig // in line 2
1364 1.21 rillig h_snprintb_m(
1365 1.21 rillig "\177\020"
1366 1.21 rillig "f\000\004lo\0"
1367 1.21 rillig "f\000\004low-bits\0"
1368 1.21 rillig "=\017match\0",
1369 1.21 rillig 0xff,
1370 1.21 rillig 22,
1371 1.21 rillig "0xff<lo=0xf>\0"
1372 1.24 rillig "0xff<low-bits=0xf=mat#\0");
1373 1.21 rillig
1374 1.21 rillig // new style, line_max exceeded by named bit-field '>' in line 2
1375 1.21 rillig h_snprintb_m(
1376 1.21 rillig "\177\020"
1377 1.21 rillig "f\000\004lo\0"
1378 1.21 rillig "f\000\004low-bits\0"
1379 1.21 rillig "=\017match\0",
1380 1.21 rillig 0xff,
1381 1.21 rillig 23,
1382 1.21 rillig "0xff<lo=0xf>\0"
1383 1.24 rillig "0xff<low-bits=0xf=matc#\0");
1384 1.21 rillig
1385 1.21 rillig // new style, named bit-field complete
1386 1.21 rillig h_snprintb_m(
1387 1.21 rillig "\177\020"
1388 1.21 rillig "f\000\004lo\0"
1389 1.21 rillig "f\000\004low-bits\0"
1390 1.21 rillig "=\017match\0",
1391 1.21 rillig 0xff,
1392 1.21 rillig 24,
1393 1.21 rillig "0xff<lo=0xf>\0"
1394 1.22 rillig "0xff<low-bits=0xf=match>\0");
1395 1.21 rillig
1396 1.21 rillig // new style, line_max exceeded by unnamed bit-field number in line 1
1397 1.21 rillig h_snprintb_m(
1398 1.21 rillig "\177\020"
1399 1.21 rillig "F\000\004\0",
1400 1.21 rillig 0xff,
1401 1.21 rillig 3,
1402 1.24 rillig "0x#\0");
1403 1.13 rillig
1404 1.21 rillig // new style, line_max exceeded by unnamed bit-field '<' in line 1
1405 1.21 rillig h_snprintb_m(
1406 1.15 rillig "\177\020"
1407 1.21 rillig "F\000\004\0",
1408 1.16 rillig 0xff,
1409 1.21 rillig 4,
1410 1.24 rillig "0xf#\0");
1411 1.16 rillig
1412 1.27 rillig // new style, line_max exceeded by unnamed bit-field value description
1413 1.27 rillig // in line 1
1414 1.21 rillig h_snprintb_m(
1415 1.21 rillig "\177\020"
1416 1.21 rillig "F\000\004\0"
1417 1.21 rillig ":\017match\0",
1418 1.21 rillig 0xff,
1419 1.16 rillig 9,
1420 1.24 rillig "0xff<mat#\0");
1421 1.21 rillig
1422 1.21 rillig // new style, line_max exceeded by unnamed bit-field '>' in line 1
1423 1.21 rillig h_snprintb_m(
1424 1.16 rillig "\177\020"
1425 1.21 rillig "F\000\004\0"
1426 1.21 rillig ":\017match\0",
1427 1.16 rillig 0xff,
1428 1.16 rillig 10,
1429 1.24 rillig "0xff<matc#\0");
1430 1.16 rillig
1431 1.27 rillig // new style, line_max exceeded by unnamed bit-field value description
1432 1.27 rillig // in line 2
1433 1.21 rillig h_snprintb_m(
1434 1.21 rillig "\177\020"
1435 1.21 rillig "F\000\004\0"
1436 1.21 rillig ":\017m1\0"
1437 1.21 rillig ":\017match\0",
1438 1.21 rillig 0xff,
1439 1.16 rillig 10,
1440 1.24 rillig "0xff<m1ma#\0");
1441 1.21 rillig
1442 1.21 rillig // new style, line_max exceeded by unnamed bit-field '>' in line 2
1443 1.21 rillig h_snprintb_m(
1444 1.16 rillig "\177\020"
1445 1.21 rillig "F\000\004\0"
1446 1.21 rillig ":\017m1\0"
1447 1.21 rillig ":\017match\0",
1448 1.16 rillig 0xff,
1449 1.16 rillig 10,
1450 1.24 rillig "0xff<m1ma#\0");
1451 1.16 rillig
1452 1.21 rillig // new style unnamed bit-field complete
1453 1.21 rillig h_snprintb_m(
1454 1.21 rillig "\177\020"
1455 1.21 rillig "F\000\004\0"
1456 1.21 rillig ":\017m1\0"
1457 1.21 rillig ":\017match\0",
1458 1.21 rillig 0xff,
1459 1.27 rillig 13,
1460 1.27 rillig "0xff<m1match>\0");
1461 1.21 rillig
1462 1.21 rillig // new style, line_max exceeded by bit-field default
1463 1.21 rillig h_snprintb_m(
1464 1.16 rillig "\177\020"
1465 1.21 rillig "f\000\004f\0"
1466 1.21 rillig "*=default\0",
1467 1.16 rillig 0xff,
1468 1.21 rillig 17,
1469 1.24 rillig "0xff<f=0xf=defau#\0");
1470 1.16 rillig
1471 1.21 rillig // new style, line_max exceeded by unmatched field value
1472 1.21 rillig h_snprintb_m(
1473 1.16 rillig "\177\020"
1474 1.21 rillig "f\000\004bits\0"
1475 1.21 rillig ":\000other\0",
1476 1.16 rillig 0xff,
1477 1.16 rillig 11,
1478 1.24 rillig "0xff<bits=#\0");
1479 1.21 rillig
1480 1.21 rillig // manual page, new style bits and fields
1481 1.21 rillig h_snprintb_m(
1482 1.21 rillig "\177\020"
1483 1.21 rillig "b\0LSB\0"
1484 1.21 rillig "b\1BITONE\0"
1485 1.21 rillig "f\4\4NIBBLE2\0"
1486 1.21 rillig "f\x10\4BURST\0"
1487 1.21 rillig "=\4FOUR\0"
1488 1.21 rillig "=\xf""FIFTEEN\0"
1489 1.21 rillig "b\x1fMSB\0",
1490 1.21 rillig 0x800f0701,
1491 1.21 rillig 34,
1492 1.21 rillig "0x800f0701<LSB,NIBBLE2=0>\0"
1493 1.22 rillig "0x800f0701<BURST=0xf=FIFTEEN,MSB>\0");
1494 1.16 rillig
1495 1.21 rillig // new style, buffer too small for complete number in line 2
1496 1.16 rillig h_snprintb_m_len(
1497 1.16 rillig 15,
1498 1.16 rillig "\177\020"
1499 1.16 rillig "b\000lsb\0"
1500 1.16 rillig "b\001two\0",
1501 1.16 rillig 0xff,
1502 1.16 rillig 11,
1503 1.16 rillig 20,
1504 1.16 rillig "0xff<lsb>\0"
1505 1.16 rillig "0xf\0" // XXX: incomplete number may be misleading
1506 1.16 rillig );
1507 1.16 rillig
1508 1.16 rillig // new-style format, buffer too small for '<' in line 2
1509 1.16 rillig h_snprintb_m_len(
1510 1.16 rillig 16,
1511 1.16 rillig "\177\020"
1512 1.16 rillig "b\000lsb\0"
1513 1.16 rillig "b\001two\0",
1514 1.16 rillig 0xff,
1515 1.16 rillig 11,
1516 1.16 rillig 20,
1517 1.16 rillig "0xff<lsb>\0"
1518 1.16 rillig "0xff\0"
1519 1.16 rillig );
1520 1.16 rillig
1521 1.16 rillig // new-style format, buffer too small for fallback
1522 1.21 rillig h_snprintb_m(
1523 1.16 rillig "\177\020"
1524 1.16 rillig "f\000\004bits\0"
1525 1.16 rillig "*=fallback\0"
1526 1.16 rillig "b\0024\0",
1527 1.16 rillig 0xff,
1528 1.16 rillig 64,
1529 1.21 rillig "0xff<bits=0xf=fallback,4>\0"
1530 1.15 rillig );
1531 1.15 rillig
1532 1.19 rillig // new-style format, buffer too small for numeric fallback
1533 1.19 rillig h_snprintb_m_len(
1534 1.19 rillig 20,
1535 1.19 rillig "\177\020"
1536 1.19 rillig "F\000\004\0"
1537 1.19 rillig "*fallback(%040jd)\0",
1538 1.19 rillig 0xff,
1539 1.19 rillig 64,
1540 1.19 rillig 57,
1541 1.19 rillig "0xff<fallback(0000\0"
1542 1.19 rillig );
1543 1.19 rillig
1544 1.19 rillig // new-style format, buffer too small for numeric fallback past buffer
1545 1.19 rillig h_snprintb_m_len(
1546 1.19 rillig 15,
1547 1.19 rillig "\177\020"
1548 1.19 rillig "F\000\004\0"
1549 1.19 rillig "*fallback(%010jd)\0"
1550 1.19 rillig "F\004\004\0"
1551 1.19 rillig "*fallback(%010jd)\0",
1552 1.19 rillig 0xff,
1553 1.19 rillig 64,
1554 1.19 rillig 48,
1555 1.19 rillig "0xff<fallback\0"
1556 1.19 rillig );
1557 1.19 rillig
1558 1.21 rillig // new style, bits and fields, line break between fields
1559 1.9 rillig h_snprintb_m(
1560 1.9 rillig "\177\020"
1561 1.9 rillig "b\0LSB\0"
1562 1.9 rillig "b\1_BITONE\0"
1563 1.9 rillig "f\4\4NIBBLE2\0"
1564 1.9 rillig "f\x10\4BURST\0"
1565 1.9 rillig "=\04FOUR\0"
1566 1.9 rillig "=\17FIFTEEN\0"
1567 1.9 rillig "b\x1fMSB\0",
1568 1.9 rillig 0x800f0701,
1569 1.9 rillig 33,
1570 1.9 rillig "0x800f0701<LSB,NIBBLE2=0>\0"
1571 1.16 rillig "0x800f0701<BURST=0xf=FIFTEEN,MSB>\0"
1572 1.16 rillig );
1573 1.9 rillig
1574 1.21 rillig // new style, bits and fields, line break after field description
1575 1.9 rillig h_snprintb_m(
1576 1.9 rillig "\177\020"
1577 1.9 rillig "b\0LSB\0"
1578 1.9 rillig "b\1_BITONE\0"
1579 1.9 rillig "f\4\4NIBBLE2\0"
1580 1.9 rillig "f\x10\4BURST\0"
1581 1.9 rillig "=\04FOUR\0"
1582 1.9 rillig "=\17FIFTEEN\0"
1583 1.9 rillig "b\x1fMSB\0",
1584 1.9 rillig 0x800f0701,
1585 1.9 rillig 32,
1586 1.9 rillig "0x800f0701<LSB,NIBBLE2=0>\0"
1587 1.9 rillig "0x800f0701<BURST=0xf=FIFTEEN>\0"
1588 1.9 rillig "0x800f0701<MSB>\0");
1589 1.2 pgoyette }
1590 1.2 pgoyette
1591 1.1 jmmv ATF_TP_ADD_TCS(tp)
1592 1.1 jmmv {
1593 1.1 jmmv
1594 1.1 jmmv ATF_TP_ADD_TC(tp, snprintb);
1595 1.2 pgoyette ATF_TP_ADD_TC(tp, snprintb_m);
1596 1.1 jmmv
1597 1.1 jmmv return atf_no_error();
1598 1.1 jmmv }
1599