Module Name:    src
Committed By:   rillig
Date:           Mon Apr  1 09:15:51 UTC 2024

Modified Files:
        src/tests/lib/libutil: t_snprintb.c

Log Message:
tests/snprintb_m: test null-terminated output in error case

While here, clean up the buffer handling for the visualized array
content in case of a failed test.


To generate a diff of this commit:
cvs rdiff -u -r1.31 -r1.32 src/tests/lib/libutil/t_snprintb.c

Please note that diffs are not public domain; they are subject to the
copyright notices on the relevant files.

Modified files:

Index: src/tests/lib/libutil/t_snprintb.c
diff -u src/tests/lib/libutil/t_snprintb.c:1.31 src/tests/lib/libutil/t_snprintb.c:1.32
--- src/tests/lib/libutil/t_snprintb.c:1.31	Mon Mar 25 20:39:27 2024
+++ src/tests/lib/libutil/t_snprintb.c	Mon Apr  1 09:15:51 2024
@@ -1,4 +1,4 @@
-/* $NetBSD: t_snprintb.c,v 1.31 2024/03/25 20:39:27 rillig Exp $ */
+/* $NetBSD: t_snprintb.c,v 1.32 2024/04/01 09:15:51 rillig Exp $ */
 
 /*
  * Copyright (c) 2002, 2004, 2008, 2010, 2024 The NetBSD Foundation, Inc.
@@ -32,7 +32,7 @@
 #include <sys/cdefs.h>
 __COPYRIGHT("@(#) Copyright (c) 2008, 2010, 2024\
  The NetBSD Foundation, inc. All rights reserved.");
-__RCSID("$NetBSD: t_snprintb.c,v 1.31 2024/03/25 20:39:27 rillig Exp $");
+__RCSID("$NetBSD: t_snprintb.c,v 1.32 2024/04/01 09:15:51 rillig Exp $");
 
 #include <stdio.h>
 #include <string.h>
@@ -42,19 +42,16 @@ __RCSID("$NetBSD: t_snprintb.c,v 1.31 20
 #include <atf-c.h>
 
 static const char *
-vis_arr(const char *arr, size_t arrsize)
+vis_arr(char *buf, size_t bufsize, const char *arr, size_t arrsize)
 {
-	static char buf[3][1024];
-	static size_t i;
-
-	i = (i + 1) % (sizeof(buf) / sizeof(buf[0]));
-	int rv = strnvisx(buf[i] + 1, sizeof(buf[i]) - 2, arr, arrsize,
+	ATF_REQUIRE(bufsize >= 2);
+	int rv = strnvisx(buf + 1, bufsize - 2, arr, arrsize,
 	    VIS_WHITE | VIS_OCTAL);
 	ATF_REQUIRE_MSG(rv >= 0, "buffer too small for size %zu", arrsize);
-	buf[i][0] = '"';
-	buf[i][1 + rv] = '"';
-	buf[i][1 + rv + 1] = '\0';
-	return buf[i];
+	buf[0] = '"';
+	buf[1 + rv] = '"';
+	buf[1 + rv + 1] = '\0';
+	return buf;
 }
 
 static void
@@ -63,7 +60,7 @@ check_snprintb_m(const char *file, size_
     size_t line_max,
     int want_rv, const char *want_buf, size_t want_bufsize)
 {
-	char buf[1024];
+	char buf[1024], vis_bitfmt[1024], vis_want_buf[1024], vis_buf[1024];
 
 	ATF_REQUIRE(bufsize <= sizeof(buf));
 	ATF_REQUIRE(want_bufsize <= sizeof(buf));
@@ -103,11 +100,12 @@ check_snprintb_m(const char *file, size_
 	    "\twant: %d bytes %s\n"
 	    "\thave: %d bytes %s\n",
 	    file, line,
-	    vis_arr(bitfmt, bitfmtlen),
+	    vis_arr(vis_bitfmt, sizeof(vis_bitfmt), bitfmt, bitfmtlen),
 	    (uintmax_t)val,
 	    line_max,
-	    want_rv, vis_arr(want_buf, want_bufsize),
-	    rv, vis_arr(buf, have_bufsize));
+	    want_rv, vis_arr(vis_want_buf, sizeof(vis_want_buf),
+		want_buf, want_bufsize),
+	    rv, vis_arr(vis_buf, sizeof(vis_buf), buf, have_bufsize));
 }
 
 #define	h_snprintb_m_len(bufsize, bitfmt, val, line_max,		\
@@ -1501,6 +1499,15 @@ ATF_TC_BODY(snprintb_m, tc)
 	    "0x800f0701<LSB,NIBBLE2=0>\0"
 	    "0x800f0701<BURST=0xf=FIFTEEN,MSB>\0");
 
+	// new style, missing number base
+	h_snprintb_m_len(
+	    1024,
+	    "\177",
+	    0xff,
+	    128,
+	    -1,
+	    "#\0");
+
 	// new style, buffer too small for complete number in line 2
 	h_snprintb_m_len(
 	    15,

Reply via email to