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 Fix hardcoded /tmp paths in testing (bug 13888). 2018-06-26 21:48:48 +00:00
bug4.c Fix hardcoded /tmp paths in testing (bug 13888). 2018-06-26 21:48:48 +00:00
bug5.c Fix hardcoded /tmp paths in testing (bug 13888). 2018-06-26 21:48:48 +00:00
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 stdio-common: Use array_length and array_end macros 2017-11-02 12:45:20 +01:00
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 CVE-2012-3406: Stack overflow in vfprintf [BZ #16617] 2014-12-15 10:09:33 +01:00
bug23-3.c CVE-2012-3406: Stack overflow in vfprintf [BZ #16617] 2014-12-15 10:09:33 +01:00
bug23-4.c CVE-2012-3406: Stack overflow in vfprintf [BZ #16617] 2014-12-15 10:09:33 +01:00
bug23.c
bug24.c
bug25.c Another round of inclusion fixes for _ISOMAC testsuite. 2017-03-22 08:44:32 -04:00
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 Fix typos. 2013-10-12 14:47:50 +02:00
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 Split DIAG_* macros to new header libc-diag.h. 2017-02-25 09:59:46 -05:00
scanf5.c
scanf7.c Split DIAG_* macros to new header libc-diag.h. 2017-02-25 09:59:46 -05:00
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 Modify several tests to use test-skeleton.c 2015-08-06 02:59:04 -04:00
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 Modify several tests to use test-skeleton.c 2014-11-05 15:24:08 +05:30
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 Modify several tests to use test-skeleton.c 2015-08-06 02:59:04 -04:00
tst-ferror.input
tst-fgets.c Prefer https for Sourceware links 2017-11-16 11:49:26 +05:30
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 stdio-common: Use array_length and array_end macros 2017-11-02 12:45:20 +01:00
tst-fseek.c Remove "Contributed by" lines 2021-09-03 22:06:44 +05:30
tst-fwrite.c Prefer https for Sourceware links 2017-11-16 11:49:26 +05:30
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 Modify several tests to use test-skeleton.c 2014-11-05 15:24:08 +05:30
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 Split DIAG_* macros to new header libc-diag.h. 2017-02-25 09:59:46 -05:00
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 Modify several tests to use test-skeleton.c 2014-11-05 15:24:08 +05:30
tst-sprintf3.c Update copyright dates with scripts/update-copyrights 2021-01-02 12:17:34 -08:00
tst-sprintf.c Split DIAG_* macros to new header libc-diag.h. 2017-02-25 09:59:46 -05:00
tst-sscanf.c Remove "Contributed by" lines 2021-09-03 22:06:44 +05:30
tst-swprintf.c stdio-common: Use array_length and array_end macros 2017-11-02 12:45:20 +01:00
tst-swscanf.c
tst-tmpnam.c Update copyright dates with scripts/update-copyrights 2021-01-02 12:17:34 -08:00
tst-unbputc.c Modify several tests to use test-skeleton.c 2014-11-05 15:24:08 +05:30
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 Modify several tests to use test-skeleton.c 2014-11-05 15:24:08 +05:30
tstdiomisc.c stdio-common: Use array_length and array_end macros 2017-11-02 12:45:20 +01:00
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 Convert 703 function definitions to prototype style. 2015-10-16 20:21:49 +00:00