glibc/stdio-common
Joseph Myers 309548bec3 Support C2X printf %b, %B
C2X adds a printf %b format (see
<http://www.open-std.org/jtc1/sc22/wg14/www/docs/n2630.pdf>, accepted
for C2X), for outputting integers in binary.  It also has recommended
practice for a corresponding %B format (like %b, but %#B starts the
output with 0B instead of 0b).  Add support for these formats to
glibc.

One existing test uses %b as an example of an unknown format, to test
how glibc printf handles unknown formats; change that to %v.  Use of
%b and %B as user-registered format specifiers continues to work (and
we already have a test that covers that, tst-printfsz.c).

Note that C2X also has scanf %b support, plus support for binary
constants starting 0b in strtol (base 0 and 2) and scanf %i (strtol
base 0 and scanf %i coming from a previous paper that added binary
integer literals).  I intend to implement those features in a separate
patch or patches; as discussed in the thread starting at
<https://sourceware.org/pipermail/libc-alpha/2020-December/120414.html>,
they will be more complicated because they involve adding extra public
symbols to ensure compatibility with existing code that might not
expect 0b constants to be handled by strtol base 0 and 2 and scanf %i,
whereas simply adding a new format specifier poses no such
compatibility concerns.

Note that the actual conversion from integer to string uses existing
code in _itoa.c.  That code has special cases for bases 8, 10 and 16,
probably so that the compiler can optimize division by an integer
constant in the code for those bases.  If desired such special cases
could easily be added for base 2 as well, but that would be an
optimization, not actually needed for these printf formats to work.

Tested for x86_64 and x86.  Also tested with build-many-glibcs.py for
aarch64-linux-gnu with GCC mainline to make sure that the test does
indeed build with GCC 12 (where format checking warnings are enabled
for most of the test).
2021-11-10 15:52:21 +00:00
..
bits Update copyright dates with scripts/update-copyrights 2021-01-02 12:17:34 -08:00
_i18n_number.h Remove "Contributed by" lines 2021-09-03 22:06:44 +05:30
_itoa.c Remove "Contributed by" lines 2021-09-03 22:06:44 +05:30
_itowa.c Remove "Contributed by" lines 2021-09-03 22:06:44 +05:30
_itowa.h Update copyright dates with scripts/update-copyrights 2021-01-02 12:17:34 -08:00
asprintf.c Update copyright dates with scripts/update-copyrights 2021-01-02 12:17:34 -08:00
bug1.c
bug1.input
bug2.c
bug3.c
bug4.c
bug5.c
bug6.c
bug6.input
bug7.c Avoid insecure usage of tmpnam in tests. 2018-07-18 21:04:12 +00:00
bug8.c
bug9.c
bug10.c
bug11.c
bug12.c
bug13.c
bug14.c Remove "Contributed by" lines 2021-09-03 22:06:44 +05:30
bug16.c
bug17.c
bug18.c
bug18a.c
bug19.c
bug19a.c
bug20.c
bug21.c Use C99-compliant scanf under _GNU_SOURCE with modern compilers. 2019-01-03 11:12:39 -05:00
bug22.c Remove most vfprintf width/precision-dependent allocations (bug 14231, bug 26211). 2020-07-07 14:54:12 +00:00
bug23-2.c
bug23-3.c
bug23-4.c
bug23.c
bug24.c
bug25.c
bug26.c Update copyright dates with scripts/update-copyrights 2021-01-02 12:17:34 -08:00
bug-vfprintf-nargs.c Remove "Contributed by" lines 2021-09-03 22:06:44 +05:30
ctermid.c Update copyright dates with scripts/update-copyrights 2021-01-02 12:17:34 -08:00
cuserid.c Update copyright dates with scripts/update-copyrights 2021-01-02 12:17:34 -08:00
Depend
dprintf.c Update copyright dates with scripts/update-copyrights 2021-01-02 12:17:34 -08:00
errlist-compat.c signal: Move sys_errlist to a compat symbol 2020-07-07 14:10:58 -03:00
errlist.c hurd: Fix errlist error mapping 2021-08-23 19:06:49 +02:00
errnobug.c Update copyright dates with scripts/update-copyrights 2021-01-02 12:17:34 -08:00
flockfile.c linux: Move flockfile/_IO_flockfile into libc 2021-05-10 23:35:44 -03:00
fprintf.c Update copyright dates with scripts/update-copyrights 2021-01-02 12:17:34 -08:00
fscanf.c Update copyright dates with scripts/update-copyrights 2021-01-02 12:17:34 -08:00
ftrylockfile.c linux: Move ftrylockfile/_IO_ftrylockfile into libc 2021-05-10 23:35:44 -03:00
funlockfile.c linux: Move funlockfile/_IO_funlockfile into libc 2021-05-10 23:35:44 -03:00
fxprintf.c Remove "Contributed by" lines 2021-09-03 22:06:44 +05:30
gentempfd.c Update copyright dates with scripts/update-copyrights 2021-01-02 12:17:34 -08:00
getline.c libio: Replace internal _IO_getdelim symbol with __getdelim 2021-07-07 18:33:52 +02:00
getw.c Update copyright dates with scripts/update-copyrights 2021-01-02 12:17:34 -08:00
iovfscanf.c Update copyright dates with scripts/update-copyrights 2021-01-02 12:17:34 -08:00
isoc99_fscanf.c Update copyright dates with scripts/update-copyrights 2021-01-02 12:17:34 -08:00
isoc99_scanf.c Update copyright dates with scripts/update-copyrights 2021-01-02 12:17:34 -08:00
isoc99_sscanf.c Update copyright dates with scripts/update-copyrights 2021-01-02 12:17:34 -08:00
isoc99_vfscanf.c Update copyright dates with scripts/update-copyrights 2021-01-02 12:17:34 -08:00
isoc99_vscanf.c Update copyright dates with scripts/update-copyrights 2021-01-02 12:17:34 -08:00
isoc99_vsscanf.c Update copyright dates with scripts/update-copyrights 2021-01-02 12:17:34 -08:00
itoa-digits.c Update copyright dates with scripts/update-copyrights 2021-01-02 12:17:34 -08:00
itoa-udigits.c Update copyright dates with scripts/update-copyrights 2021-01-02 12:17:34 -08:00
itowa-digits.c Update copyright dates with scripts/update-copyrights 2021-01-02 12:17:34 -08:00
Makefile Support C2X printf %b, %B 2021-11-10 15:52:21 +00:00
perror.c Update copyright dates with scripts/update-copyrights 2021-01-02 12:17:34 -08:00
printf_fp.c Remove "Contributed by" lines 2021-09-03 22:06:44 +05:30
printf_fphex.c Remove "Contributed by" lines 2021-09-03 22:06:44 +05:30
printf_size.c Remove "Contributed by" lines 2021-09-03 22:06:44 +05:30
printf-parse.h Update copyright dates with scripts/update-copyrights 2021-01-02 12:17:34 -08:00
printf-parsemb.c Support C2X printf %b, %B 2021-11-10 15:52:21 +00:00
printf-parsewc.c
printf-prs.c stdio-common/printf-prs.c: Reword comment 2021-03-31 17:20:18 -03:00
printf.c Update copyright dates with scripts/update-copyrights 2021-01-02 12:17:34 -08:00
printf.h Update copyright dates with scripts/update-copyrights 2021-01-02 12:17:34 -08:00
psiginfo-data.h
psiginfo-define.h
psiginfo.c Update copyright dates with scripts/update-copyrights 2021-01-02 12:17:34 -08:00
psignal.c Update copyright dates with scripts/update-copyrights 2021-01-02 12:17:34 -08:00
putw.c Update copyright dates with scripts/update-copyrights 2021-01-02 12:17:34 -08:00
reg-modifier.c Update copyright dates with scripts/update-copyrights 2021-01-02 12:17:34 -08:00
reg-printf.c Update copyright dates with scripts/update-copyrights 2021-01-02 12:17:34 -08:00
reg-type.c Update copyright dates with scripts/update-copyrights 2021-01-02 12:17:34 -08:00
remove.c Update copyright dates with scripts/update-copyrights 2021-01-02 12:17:34 -08:00
rename.c Update copyright dates with scripts/update-copyrights 2021-01-02 12:17:34 -08:00
renameat2.c Update copyright dates with scripts/update-copyrights 2021-01-02 12:17:34 -08:00
renameat.c Update copyright dates with scripts/update-copyrights 2021-01-02 12:17:34 -08:00
scanf1.c
scanf2.c
scanf3.c
scanf4.c
scanf5.c
scanf7.c
scanf8.c
scanf9.c
scanf10.c
scanf11.c Remove "Contributed by" lines 2021-09-03 22:06:44 +05:30
scanf12.c
scanf12.input
scanf13.c
scanf14.c Update copyright dates with scripts/update-copyrights 2021-01-02 12:17:34 -08:00
scanf14a.c Fix stdio-common tests for GCC 12 -Waddress 2021-10-04 19:10:43 +00:00
scanf15.c Update copyright dates with scripts/update-copyrights 2021-01-02 12:17:34 -08:00
scanf16.c Update copyright dates with scripts/update-copyrights 2021-01-02 12:17:34 -08:00
scanf16a.c Fix stdio-common tests for GCC 12 -Waddress 2021-10-04 19:10:43 +00:00
scanf17.c Update copyright dates with scripts/update-copyrights 2021-01-02 12:17:34 -08:00
scanf.c Update copyright dates with scripts/update-copyrights 2021-01-02 12:17:34 -08:00
siglist.c Update copyright dates with scripts/update-copyrights 2021-01-02 12:17:34 -08:00
snprintf.c Update copyright dates with scripts/update-copyrights 2021-01-02 12:17:34 -08:00
sprintf.c Update copyright dates with scripts/update-copyrights 2021-01-02 12:17:34 -08:00
sscanf.c Update copyright dates with scripts/update-copyrights 2021-01-02 12:17:34 -08:00
stdio_ext.h Update copyright dates with scripts/update-copyrights 2021-01-02 12:17:34 -08:00
stdio_lim.h.in Update copyright dates with scripts/update-copyrights 2021-01-02 12:17:34 -08:00
tempnam.c Update copyright dates with scripts/update-copyrights 2021-01-02 12:17:34 -08:00
tempname.c Update copyright dates with scripts/update-copyrights 2021-01-02 12:17:34 -08:00
temptest.c
test_rdwr.c Update copyright dates with scripts/update-copyrights 2021-01-02 12:17:34 -08:00
test-fseek.c Update copyright dates with scripts/update-copyrights 2021-01-02 12:17:34 -08:00
test-fwrite.c
test-popen.c Update copyright dates with scripts/update-copyrights 2021-01-02 12:17:34 -08:00
test-strerr.c Update copyright dates with scripts/update-copyrights 2021-01-02 12:17:34 -08:00
test-vfprintf.c Remove "Contributed by" lines 2021-09-03 22:06:44 +05:30
tfformat.c stdio-common: Add a few double formatting tests [BZ #27245] 2021-02-03 16:47:47 -03:00
tiformat.c
tllformat.c
tmpfile64.c Update copyright dates with scripts/update-copyrights 2021-01-02 12:17:34 -08:00
tmpfile.c Update copyright dates with scripts/update-copyrights 2021-01-02 12:17:34 -08:00
tmpnam_r.c Annotate additional APIs with GCC attribute access. 2021-05-06 11:01:05 -06:00
tmpnam.c Annotate additional APIs with GCC attribute access. 2021-05-06 11:01:05 -06:00
tst-bz11319-fortify2.c Use PRINTF_FORTIFY instead of _IO_FLAGS2_FORTIFY (bug 11319) 2018-12-05 18:15:43 -02:00
tst-bz11319.c Update copyright dates with scripts/update-copyrights 2021-01-02 12:17:34 -08:00
tst-cookie.c
tst-errno-manual.py Update copyright dates with scripts/update-copyrights 2021-01-02 12:17:34 -08:00
tst-fdopen.c Avoid insecure usage of tmpnam in tests. 2018-07-18 21:04:12 +00:00
tst-ferror.c
tst-ferror.input
tst-fgets.c
tst-fileno.c Update copyright dates with scripts/update-copyrights 2021-01-02 12:17:34 -08:00
tst-fmemopen2.c Update copyright dates with scripts/update-copyrights 2021-01-02 12:17:34 -08:00
tst-fmemopen3.c Update copyright dates with scripts/update-copyrights 2021-01-02 12:17:34 -08:00
tst-fmemopen4.c Update copyright dates with scripts/update-copyrights 2021-01-02 12:17:34 -08:00
tst-fmemopen.c Update copyright dates with scripts/update-copyrights 2021-01-02 12:17:34 -08:00
tst-fphex-wide.c Remove "Contributed by" lines 2021-09-03 22:06:44 +05:30
tst-fphex.c
tst-fseek.c Remove "Contributed by" lines 2021-09-03 22:06:44 +05:30
tst-fwrite.c
tst-gets.c Remove "Contributed by" lines 2021-09-03 22:06:44 +05:30
tst-gets.input
tst-grouping.c
tst-long-dbl-fphex.c Remove "Contributed by" lines 2021-09-03 22:06:44 +05:30
tst-obprintf.c
tst-perror.c Remove "Contributed by" lines 2021-09-03 22:06:44 +05:30
tst-popen2.c
tst-popen.c Remove "Contributed by" lines 2021-09-03 22:06:44 +05:30
tst-printf-binary-main.c Support C2X printf %b, %B 2021-11-10 15:52:21 +00:00
tst-printf-binary.c Support C2X printf %b, %B 2021-11-10 15:52:21 +00:00
tst-printf-bz18872.sh Update copyright dates with scripts/update-copyrights 2021-01-02 12:17:34 -08:00
tst-printf-bz25691.c Update copyright dates with scripts/update-copyrights 2021-01-02 12:17:34 -08:00
tst-printf-fp-free.c Update copyright dates with scripts/update-copyrights 2021-01-02 12:17:34 -08:00
tst-printf-fp-leak.c Update copyright dates with scripts/update-copyrights 2021-01-02 12:17:34 -08:00
tst-printf-round.c Update copyright dates with scripts/update-copyrights 2021-01-02 12:17:34 -08:00
tst-printf.c Support C2X printf %b, %B 2021-11-10 15:52:21 +00:00
tst-printf.sh Support C2X printf %b, %B 2021-11-10 15:52:21 +00:00
tst-printfsz-islongdouble.c Update copyright dates with scripts/update-copyrights 2021-01-02 12:17:34 -08:00
tst-printfsz-islongdouble.sh Update copyright dates with scripts/update-copyrights 2021-01-02 12:17:34 -08:00
tst-printfsz.c
tst-put-error.c Update copyright dates with scripts/update-copyrights 2021-01-02 12:17:34 -08:00
tst-renameat2.c Update copyright dates with scripts/update-copyrights 2021-01-02 12:17:34 -08:00
tst-rndseek.c Don't reduce test timeout to less than default 2018-10-17 09:34:13 +02:00
tst-scanf-round.c Update copyright dates with scripts/update-copyrights 2021-01-02 12:17:34 -08:00
tst-setvbuf1.c
tst-setvbuf1.expect
tst-sprintf2.c
tst-sprintf3.c Update copyright dates with scripts/update-copyrights 2021-01-02 12:17:34 -08:00
tst-sprintf.c
tst-sscanf.c Remove "Contributed by" lines 2021-09-03 22:06:44 +05:30
tst-swprintf.c
tst-swscanf.c
tst-tmpnam.c Update copyright dates with scripts/update-copyrights 2021-01-02 12:17:34 -08:00
tst-unbputc.c
tst-unbputc.sh Update copyright dates with scripts/update-copyrights 2021-01-02 12:17:34 -08:00
tst-ungetc.c Avoid insecure usage of tmpnam in tests. 2018-07-18 21:04:12 +00:00
tst-unlockedio.c Remove "Contributed by" lines 2021-09-03 22:06:44 +05:30
tst-vfprintf-mbs-prec.c Update copyright dates with scripts/update-copyrights 2021-01-02 12:17:34 -08:00
tst-vfprintf-user-type.c Update copyright dates with scripts/update-copyrights 2021-01-02 12:17:34 -08:00
tst-vfprintf-width-prec-alloc.c Update copyright dates with scripts/update-copyrights 2021-01-02 12:17:34 -08:00
tst-vfprintf-width-prec.c Fix stdio-common tests for GCC 12 -Waddress 2021-10-04 19:10:43 +00:00
tst-wc-printf.c
tstdiomisc.c
tstgetln.c Update copyright dates with scripts/update-copyrights 2021-01-02 12:17:34 -08:00
tstgetln.input
tstscanf.c Update copyright dates with scripts/update-copyrights 2021-01-02 12:17:34 -08:00
tstscanf.input
Versions Add __vfscanf_internal and __vfwscanf_internal with flags arguments. 2018-12-05 18:15:42 -02:00
vfprintf-internal.c Support C2X printf %b, %B 2021-11-10 15:52:21 +00:00
vfprintf.c Update copyright dates with scripts/update-copyrights 2021-01-02 12:17:34 -08:00
vfscanf-internal.c stdio: fix vfscanf with matches longer than INT_MAX (bug 27650) 2021-05-03 10:34:11 +02:00
vfscanf.c Update copyright dates with scripts/update-copyrights 2021-01-02 12:17:34 -08:00
vfwprintf-internal.c Add __v*printf_internal with flags arguments 2018-12-05 18:15:42 -02:00
vfwprintf.c Update copyright dates with scripts/update-copyrights 2021-01-02 12:17:34 -08:00
vfwscanf-internal.c Add __vfscanf_internal and __vfwscanf_internal with flags arguments. 2018-12-05 18:15:42 -02:00
vfwscanf.c Update copyright dates with scripts/update-copyrights 2021-01-02 12:17:34 -08:00
vprintf.c Update copyright dates with scripts/update-copyrights 2021-01-02 12:17:34 -08:00
xbug.c