Module Name: src Committed By: rillig Date: Fri Feb 16 18:09:16 UTC 2024
Modified Files: src/common/lib/libutil: snprintb.c src/tests/lib/libutil: t_snprintb.c Log Message: snprintb: fix '=' and ':' for 8-bit values on platforms with signed char Previously, '=' and ':' worked only on platforms where plain 'char' is unsigned. On platforms where plain 'char' is signed, only 7-bit values worked. To generate a diff of this commit: cvs rdiff -u -r1.28 -r1.29 src/common/lib/libutil/snprintb.c cvs rdiff -u -r1.16 -r1.17 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/common/lib/libutil/snprintb.c diff -u src/common/lib/libutil/snprintb.c:1.28 src/common/lib/libutil/snprintb.c:1.29 --- src/common/lib/libutil/snprintb.c:1.28 Fri Feb 16 18:03:16 2024 +++ src/common/lib/libutil/snprintb.c Fri Feb 16 18:09:15 2024 @@ -1,4 +1,4 @@ -/* $NetBSD: snprintb.c,v 1.28 2024/02/16 18:03:16 rillig Exp $ */ +/* $NetBSD: snprintb.c,v 1.29 2024/02/16 18:09:15 rillig Exp $ */ /*- * Copyright (c) 2002 The NetBSD Foundation, Inc. @@ -41,7 +41,7 @@ # include <sys/cdefs.h> # if defined(LIBC_SCCS) && !defined(lint) -__RCSID("$NetBSD: snprintb.c,v 1.28 2024/02/16 18:03:16 rillig Exp $"); +__RCSID("$NetBSD: snprintb.c,v 1.29 2024/02/16 18:09:15 rillig Exp $"); # endif # include <sys/types.h> @@ -51,7 +51,7 @@ __RCSID("$NetBSD: snprintb.c,v 1.28 2024 # include <errno.h> # else /* ! _KERNEL */ # include <sys/cdefs.h> -__KERNEL_RCSID(0, "$NetBSD: snprintb.c,v 1.28 2024/02/16 18:03:16 rillig Exp $"); +__KERNEL_RCSID(0, "$NetBSD: snprintb.c,v 1.29 2024/02/16 18:09:15 rillig Exp $"); # include <sys/param.h> # include <sys/inttypes.h> # include <sys/systm.h> @@ -206,7 +206,7 @@ snprintb_m(char *buf, size_t bufsize, co int matched = 1; while (*bitfmt != '\0') { char kind = *bitfmt++; - int bit = *bitfmt++; + uint8_t bit = *bitfmt++; switch (kind) { case 'b': if (((val >> bit) & 1) == 0) @@ -254,7 +254,7 @@ snprintb_m(char *buf, size_t bufsize, co * This only works for values in [0..255], * of course. */ - if ((int)field != bit) + if (field != bit) goto skip; matched = 1; if (kind == '=') Index: src/tests/lib/libutil/t_snprintb.c diff -u src/tests/lib/libutil/t_snprintb.c:1.16 src/tests/lib/libutil/t_snprintb.c:1.17 --- src/tests/lib/libutil/t_snprintb.c:1.16 Fri Feb 16 01:19:53 2024 +++ src/tests/lib/libutil/t_snprintb.c Fri Feb 16 18:09:16 2024 @@ -1,4 +1,4 @@ -/* $NetBSD: t_snprintb.c,v 1.16 2024/02/16 01:19:53 rillig Exp $ */ +/* $NetBSD: t_snprintb.c,v 1.17 2024/02/16 18:09:16 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\ The NetBSD Foundation, inc. All rights reserved."); -__RCSID("$NetBSD: t_snprintb.c,v 1.16 2024/02/16 01:19:53 rillig Exp $"); +__RCSID("$NetBSD: t_snprintb.c,v 1.17 2024/02/16 18:09:16 rillig Exp $"); #include <stdio.h> #include <string.h> @@ -492,6 +492,15 @@ ATF_TC_BODY(snprintb, tc) 0x77ff55, "0x77ff55<Field=0x77ff=other(77ff),other(77ff)>"); + // new-style format, bit-field with 8 bits + h_snprintb( + "\177\020" + "F\010\010\0" + ":\377all\0" + "*other\0", + 0xff00, + "0xff00<other>"); + // new-style format, bit-fields with no match h_snprintb( "\177\020"