Module Name:    src
Committed By:   rillig
Date:           Sat Feb 24 12:44:11 UTC 2024

Modified Files:
        src/common/lib/libutil: snprintb.c

Log Message:
snprintb: clean up

Use consistent data types for buffer positions and lengths, to avoid
type casts.


To generate a diff of this commit:
cvs rdiff -u -r1.40 -r1.41 src/common/lib/libutil/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/common/lib/libutil/snprintb.c
diff -u src/common/lib/libutil/snprintb.c:1.40 src/common/lib/libutil/snprintb.c:1.41
--- src/common/lib/libutil/snprintb.c:1.40	Sat Feb 24 12:40:00 2024
+++ src/common/lib/libutil/snprintb.c	Sat Feb 24 12:44:11 2024
@@ -1,7 +1,7 @@
-/*	$NetBSD: snprintb.c,v 1.40 2024/02/24 12:40:00 rillig Exp $	*/
+/*	$NetBSD: snprintb.c,v 1.41 2024/02/24 12:44:11 rillig Exp $	*/
 
 /*-
- * Copyright (c) 2002 The NetBSD Foundation, Inc.
+ * Copyright (c) 2002, 2024 The NetBSD Foundation, Inc.
  * All rights reserved.
  *
  * Redistribution and use in source and binary forms, with or without
@@ -26,12 +26,6 @@
  * POSSIBILITY OF SUCH DAMAGE.
  */
 
-/*
- * snprintb: print an interpreted bitmask to a buffer
- *
- * => returns the length of the buffer that would be required to print the
- *    string minus the terminating NUL.
- */
 #ifndef _STANDALONE
 # ifndef _KERNEL
 
@@ -40,8 +34,8 @@
 #  endif
 
 #  include <sys/cdefs.h>
-#  if defined(LIBC_SCCS) && !defined(lint)
-__RCSID("$NetBSD: snprintb.c,v 1.40 2024/02/24 12:40:00 rillig Exp $");
+#  if defined(LIBC_SCCS)
+__RCSID("$NetBSD: snprintb.c,v 1.41 2024/02/24 12:44:11 rillig Exp $");
 #  endif
 
 #  include <sys/types.h>
@@ -51,7 +45,7 @@ __RCSID("$NetBSD: snprintb.c,v 1.40 2024
 #  include <errno.h>
 # else /* ! _KERNEL */
 #  include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: snprintb.c,v 1.40 2024/02/24 12:40:00 rillig Exp $");
+__KERNEL_RCSID(0, "$NetBSD: snprintb.c,v 1.41 2024/02/24 12:44:11 rillig Exp $");
 #  include <sys/param.h>
 #  include <sys/inttypes.h>
 #  include <sys/systm.h>
@@ -67,10 +61,10 @@ typedef struct {
 	size_t const line_max;
 
 	const char *const num_fmt;
-	unsigned total_len;
-	unsigned line_pos;
-	unsigned comma_pos;
-	char sep;
+	size_t total_len;
+	size_t line_pos;
+	size_t comma_pos;
+	int in_angle_brackets;
 } state;
 
 static void
@@ -94,39 +88,39 @@ store_num(state *s, const char *fmt, uin
 }
 
 static void
-put_eol(state *s)
+store_eol(state *s)
 {
 	if (s->total_len - s->line_pos > s->line_max) {
-		s->total_len = (unsigned)(s->line_pos + s->line_max - 1);
+		s->total_len = s->line_pos + s->line_max - 1;
 		store(s, '#');
 	}
 	store(s, '\0');
 	s->line_pos = s->total_len;
 	s->comma_pos = 0;
-	s->sep = '<';
+	s->in_angle_brackets = 0;
 }
 
 static void
-put_sep(state *s)
+store_delimiter(state *s)
 {
-	if (s->sep == ',') {
+	if (s->in_angle_brackets) {
 		s->comma_pos = s->total_len;
 		store(s, ',');
 	} else {
 		store(s, '<');
-		s->sep = ',';
+		s->in_angle_brackets = 1;
 	}
 }
 
 static void
-wrap_if_necessary(state *s, const char *bitfmt)
+maybe_wrap_line(state *s, const char *bitfmt)
 {
 	if (s->line_max > 0
 	    && s->comma_pos > 0
 	    && s->total_len - s->line_pos >= s->line_max) {
 		s->total_len = s->comma_pos;
 		store(s, '>');
-		put_eol(s);
+		store_eol(s);
 		store_num(s, s->num_fmt, s->val);
 		s->bitfmt = bitfmt;
 	}
@@ -141,10 +135,10 @@ old_style(state *s)
 		if (bit > ' ')
 			return -1;
 		if (s->val & (1U << (bit - 1))) {
-			put_sep(s);
+			store_delimiter(s);
 			while ((uint8_t)*++s->bitfmt > ' ')
 				store(s, *s->bitfmt);
-			wrap_if_necessary(s, cur_bitfmt);
+			maybe_wrap_line(s, cur_bitfmt);
 		} else
 			while ((uint8_t)*++s->bitfmt > ' ')
 				continue;
@@ -170,10 +164,10 @@ new_style(state *s)
 			s->bitfmt += 2;
 			if (((s->val >> b_bit) & 1) == 0)
 				goto skip_description;
-			put_sep(s);
+			store_delimiter(s);
 			while (*s->bitfmt++ != '\0')
 				store(s, s->bitfmt[-1]);
-			wrap_if_necessary(s, cur_bitfmt);
+			maybe_wrap_line(s, cur_bitfmt);
 			break;
 		case 'f':
 		case 'F':
@@ -189,14 +183,14 @@ new_style(state *s)
 			if (f_width < 64)
 				field &= ((uint64_t) 1 << f_width) - 1;
 			s->bitfmt += 3;
-			put_sep(s);
+			store_delimiter(s);
 			if (kind == 'F')
 				goto skip_description;
 			while (*s->bitfmt++ != '\0')
 				store(s, s->bitfmt[-1]);
 			store(s, '=');
 			store_num(s, s->num_fmt, field);
-			wrap_if_necessary(s, cur_bitfmt);
+			maybe_wrap_line(s, cur_bitfmt);
 			break;
 		case '=':
 		case ':':
@@ -209,7 +203,7 @@ new_style(state *s)
 				store(s, '=');
 			while (*s->bitfmt++ != '\0')
 				store(s, s->bitfmt[-1]);
-			wrap_if_necessary(s, prev_bitfmt);
+			maybe_wrap_line(s, prev_bitfmt);
 			break;
 		case '*':
 			s->bitfmt++;
@@ -218,7 +212,7 @@ new_style(state *s)
 			matched = 1;
 			if (store_num(s, s->bitfmt, field) < 0)
 				return -1;
-			wrap_if_necessary(s, prev_bitfmt);
+			maybe_wrap_line(s, prev_bitfmt);
 			goto skip_description;
 		default:
 			s->bitfmt += 2;
@@ -235,7 +229,7 @@ static void
 finish_buffer(state *s)
 {
 	if (s->line_max > 0) {
-		put_eol(s);
+		store_eol(s);
 		if (s->bufsize >= 2 && s->total_len > s->bufsize - 2)
 			s->buf[s->bufsize - 2] = '\0';
 	}
@@ -251,7 +245,7 @@ snprintb_m(char *buf, size_t bufsize, co
 #ifdef _KERNEL
 	/*
 	 * For safety; no other *s*printf() do this, but in the kernel
-	 * we don't usually check the return value
+	 * we don't usually check the return value.
 	 */
 	if (bufsize > 0)
 		(void)memset(buf, 0, bufsize);
@@ -282,9 +276,7 @@ snprintb_m(char *buf, size_t bufsize, co
 		.bitfmt = bitfmt,
 		.val = val,
 		.line_max = line_max,
-
 		.num_fmt = num_fmt,
-		.sep = '<',
 	};
 	if (num_fmt == NULL)
 		goto internal;
@@ -294,7 +286,7 @@ snprintb_m(char *buf, size_t bufsize, co
 	if ((old ? old_style(&s) : new_style(&s)) < 0)
 		goto internal;
 
-	if (s.sep != '<')
+	if (s.in_angle_brackets)
 		store(&s, '>');
 	finish_buffer(&s);
 	return (int)(s.total_len - 1);

Reply via email to