diff options
| author | Rich Felker <dalias@aerifal.cx> | 2023-11-06 13:59:06 -0500 | 
|---|---|---|
| committer | Rich Felker <dalias@aerifal.cx> | 2023-11-06 13:59:06 -0500 | 
| commit | 7b6a6516e133a4154022de4d15b3d5bc800ab3ad (patch) | |
| tree | 7d440488296589db0699ab0e66f6543c383f8533 /src | |
| parent | 8c086e767468cc11c6d58d6a92d8511c2bd12024 (diff) | |
| download | musl-7b6a6516e133a4154022de4d15b3d5bc800ab3ad.tar.gz | |
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.
Diffstat (limited to 'src')
| -rw-r--r-- | src/stdio/vfprintf.c | 2 | 
1 files changed, 2 insertions, 0 deletions
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;  | 
