Re: [PATCH v5 next 00/17] Enhance printf()

From: Thomas Weißschuh

Date: Sun Mar 08 2026 - 17:01:35 EST


Hi David,

thanks again for your patches!

On 2026-03-08 11:37:25+0000, david.laight.linux@xxxxxxxxx wrote:
> From: David Laight <david.laight.linux@xxxxxxxxx>
> David Laight (17):
> tools/nolibc: Add _NOLIBC_OPTIMIZER_HIDE_VAR() to compiler.h
> selftests/nolibc: Rename w to written in expect_vfprintf()
> tools/nolibc: Implement strerror() in terms of strerror_r()
> tools/nolibc: Rename the 'errnum' parameter to strerror()
> tools/nolibc/printf: Output pad characters in 16 byte chunks
> tools/nolibc/printf: Simplify __nolibc_printf()
> tools/nolibc/printf: Use goto and reduce indentation
> tools/nolibc/printf: Use bit-masks to hold requested flag, length and
> conversion chars
> tools/nolibc/printf: Add support for length modifiers tzqL and formats
> iX
> tools/nolibc/printf: Handle "%s" with the numeric formats
> tools/nolibc/printf: Prepend sign to converted number
> tools/nolibc/printf: Add support for conversion flags space and plus
> tools/nolibc/printf: Special case 0 and add support for %#x
> tools/nolibc/printf: Add support for left aligning fields
> tools/nolibc/printf: Add support for zero padding and field precision
> tools/nolibc/printf: Add support for octal output

Beginning from here we have another sign-compare warning:

/home/t-8ch/.cache/crosstools/gcc-13.2.0-nolibc/i386-linux/bin/i386-linux-gcc -Os -fno-ident -fno-asynchronous-unwind-tables -std=c89 -W -Wall -Wextra -fno-stack-protector -Wmissing-prototypes -fstack-protector-all -mstack-protector-guard=global -fsanitize=undefined -fsanitize-trap=all -m32 -Werror -Wl,--fatal-warnings -o nolibc-test \
-nostdlib -nostdinc -static -Isysroot/i386/include nolibc-test.c nolibc-test-linkage.c -lgcc
In file included from sysroot/i386/include/nolibc.h:123,
from sysroot/i386/include/stdio.h:8,
from nolibc-test.c:12:
sysroot/i386/include/stdio.h: In function '__nolibc_printf':
sysroot/i386/include/stdio.h:569:41: error: comparison of integer expressions of different signedness: 'unsigned int' and 'char' [-Werror=sign-compare]
569 | if (sign_prefix != *out) {
| ^~
cc1: all warnings being treated as errors

I have applied all of the patches *before*
"tools/nolibc/printf: Prepend sign to converted number", which
introduced the sign_prefix variable.

Could you fix this up and repost the remaining patches?


Thomas

> selftests/nolibc: Use printf variable field widths and precisions
>
> tools/include/nolibc/compiler.h | 3 +
> tools/include/nolibc/stdio.h | 427 ++++++++++++++-----
> tools/testing/selftests/nolibc/nolibc-test.c | 99 +++--
> 3 files changed, 371 insertions(+), 158 deletions(-)