From 7b6a6516e133a4154022de4d15b3d5bc800ab3ad Mon Sep 17 00:00:00 2001 From: Rich Felker Date: Mon, 6 Nov 2023 13:59:06 -0500 Subject: byte-based printf family: emit a nul byte for %lc with argument zero this is contrary to the spec as written, which requires %lc to behave as if it were %ls on a 2-wchar_t buffer containing the argument and zero. however, apparently no other implementations conform to the spec as written, and in response to Austin Group issue #1647, WG14 chose to align with existing practice and have %lc produce output for this case. --- src/stdio/vfprintf.c | 2 ++ 1 file changed, 2 insertions(+) (limited to 'src/stdio/vfprintf.c') diff --git a/src/stdio/vfprintf.c b/src/stdio/vfprintf.c index 33019ff1..497c5e19 100644 --- a/src/stdio/vfprintf.c +++ b/src/stdio/vfprintf.c @@ -588,6 +588,7 @@ static int printf_core(FILE *f, const char *fmt, va_list *ap, union arg *nl_arg, } p = MAX(p, z-a + !arg.i); break; + narrow_c: case 'c': *(a=z-(p=1))=arg.i; fl &= ~ZERO_PAD; @@ -602,6 +603,7 @@ static int printf_core(FILE *f, const char *fmt, va_list *ap, union arg *nl_arg, fl &= ~ZERO_PAD; break; case 'C': + if (!arg.i) goto narrow_c; wc[0] = arg.i; wc[1] = 0; arg.p = wc; -- cgit v1.2.1