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);