glibc/libio
Joseph Myers 487890009e Support __STDC_WANT_LIB_EXT2__ feature test macro.
This patch implements support for the __STDC_WANT_LIB_EXT2__ feature
test macro from ISO/IEC TR 24731-2:2010, thereby implementing one
possible approach for supporting ISO C feature test macros.

Recall that, as described in
<https://sourceware.org/ml/libc-alpha/2016-05/msg00486.html>, these
macros work based on the definition when affected headers are
included, so cannot be handled once when the first system header is
included because that might not be one of the headers the particular
macro in question affects.
<https://sourceware.org/ml/libc-alpha/2016-05/msg00680.html> expresses
views on possible approaches for implementation and
<https://sourceware.org/ml/libc-alpha/2016-06/msg00039.html> follows
up on that.

This patch arranges things so that the relevant condition is
__GLIBC_USE (LIB_EXT2), following one of the suggestions given.
Headers using these macros include <bits/libc-header-start.h>, which
in turn includes <features.h>.  Headers must define
__GLIBC_INTERNAL_STARTING_HEADER_IMPLEMENTATION before including
<bits/libc-header-start.h>, to discourage inclusion outside glibc as
requested.  __USE_GNU conditions on affected functions are changed to
__GLIBC_USE (LIB_EXT2), while it's added as an additional alternative
on the conditions for functions already enabled for some POSIX
versions.

It would be possible to convert existing __USE_* conditionals to
__GLIBC_USE (with the relevant __GLIBC_USE_* being defined in
<features.h> where __USE_* are presently defined), and so make them
typo-proof (given -Wundef -Werror in glibc builds) because __GLIBC_USE
is used with #if not #ifdef / #if defined.

No attempt is made to enforce the rule about diagnosing different
definitions of __STDC_WANT_LIB_EXT2__ when affected headers are
included; such a diagnostic is incompatible with multiple-include
guards on the affected headers, unless compiler extensions are added
to support it.

As previously noted, glibc does not implement all features from TR
24731-2:2010: the functions aswprintf vaswprintf getwdelim getwline
are not in glibc, although they would be appropriate to add if someone
wished to do so.  But I think it makes sense to support the feature
test macro if *any* of the controlled features are present in glibc.

Tested for x86_64 and x86 (testsuite, and that installed stripped
shared libraries are unchanged by the patch).

	* bits/libc-header-start.h: New file.
	* Makefile (headers): Add bits/libc-header-start.h.
	* include/features.h (__STDC_WANT_LIB_EXT2__): Document.
	(__GLIBC_USE): New macro.
	* libio/stdio.h: Define
	__GLIBC_INTERNAL_STARTING_HEADER_IMPLEMENTATION and include
	<bits/libc-header-start.h> instead of including <features.h>.
	(fmemopen): Declare also if [__GLIBC_USE (LIB_EXT2)].
	(open_memstream): Likewise.
	(vasprintf): Declare if [__GLIBC_USE (LIB_EXT2)], not [__USE_GNU].
	(__asprintf): Likewise.
	(asprintf): Likewise.
	(__getdelim): Declare also if [__GLIBC_USE (LIB_EXT2)].
	(getdelim): Likewise.
	(getline): Likewise.
	* string/string.h: Define
	__GLIBC_INTERNAL_STARTING_HEADER_IMPLEMENTATION and include
	<bits/libc-header-start.h> instead of including <features.h>.
	(strdup): Declare also if [__GLIBC_USE (LIB_EXT2)]
	(strndup): Likewise.
	* wcsmbs/wchar.h: Define
	__GLIBC_INTERNAL_STARTING_HEADER_IMPLEMENTATION and include
	<bits/libc-header-start.h> instead of including <features.h>.
	(open_wmemstream): Declare also if [__GLIBC_USE (LIB_EXT2)].
	* manual/creature.texi (__STDC_WANT_LIB_EXT2__): Document macro.
2016-08-02 17:40:35 +00:00
..
bits Update copyright dates with scripts/update-copyrights. 2016-01-04 16:05:18 +00:00
__fbufsize.c Update copyright dates with scripts/update-copyrights. 2016-01-04 16:05:18 +00:00
__flbf.c Update copyright dates with scripts/update-copyrights. 2016-01-04 16:05:18 +00:00
__fpending.c Update copyright dates with scripts/update-copyrights. 2016-01-04 16:05:18 +00:00
__fpurge.c Update copyright dates with scripts/update-copyrights. 2016-01-04 16:05:18 +00:00
__freadable.c Update copyright dates with scripts/update-copyrights. 2016-01-04 16:05:18 +00:00
__freading.c Update copyright dates with scripts/update-copyrights. 2016-01-04 16:05:18 +00:00
__fsetlocking.c Update copyright dates with scripts/update-copyrights. 2016-01-04 16:05:18 +00:00
__fwritable.c Update copyright dates with scripts/update-copyrights. 2016-01-04 16:05:18 +00:00
__fwriting.c Update copyright dates with scripts/update-copyrights. 2016-01-04 16:05:18 +00:00
bug-fopena+.c
bug-fseek.c
bug-ftell.c
bug-memstream1.c
bug-mmap-fflush.c
bug-rewind2.c Fix warnings in fwscanf / rewind tests. 2014-11-26 12:54:39 +00:00
bug-rewind.c Fix warnings in fwscanf / rewind tests. 2014-11-26 12:54:39 +00:00
bug-ungetc2.c
bug-ungetc3.c
bug-ungetc4.c Update copyright dates with scripts/update-copyrights. 2016-01-04 16:05:18 +00:00
bug-ungetc.c
bug-ungetwc1.c Fix libio/bug-ungetwc1.c warning. 2014-11-27 16:01:04 +00:00
bug-ungetwc2.c
bug-wfflush.c
bug-wmemstream1.c
bug-wsetpos.c
clearerr_u.c Update copyright dates with scripts/update-copyrights. 2016-01-04 16:05:18 +00:00
clearerr.c Update copyright dates with scripts/update-copyrights. 2016-01-04 16:05:18 +00:00
Depend
fcloseall.c Update copyright dates with scripts/update-copyrights. 2016-01-04 16:05:18 +00:00
feof_u.c Update copyright dates with scripts/update-copyrights. 2016-01-04 16:05:18 +00:00
feof.c Update copyright dates with scripts/update-copyrights. 2016-01-04 16:05:18 +00:00
ferror_u.c Update copyright dates with scripts/update-copyrights. 2016-01-04 16:05:18 +00:00
ferror.c Update copyright dates with scripts/update-copyrights. 2016-01-04 16:05:18 +00:00
filedoalloc.c libio: Clean up _IO_file_doallocate and _IO_wfile_doallocate 2016-03-07 17:05:06 +01:00
fileno.c Update copyright dates with scripts/update-copyrights. 2016-01-04 16:05:18 +00:00
fileops.c libio: Implement vtable verification [BZ #20191] 2016-06-23 20:01:52 +02:00
fmemopen.c libio: Fix fmemopen append mode failure (BZ# 20012) 2016-04-29 19:25:17 -03:00
fputc_u.c Update copyright dates with scripts/update-copyrights. 2016-01-04 16:05:18 +00:00
fputc.c Update copyright dates with scripts/update-copyrights. 2016-01-04 16:05:18 +00:00
fputwc_u.c Update copyright dates with scripts/update-copyrights. 2016-01-04 16:05:18 +00:00
fputwc.c Update copyright dates with scripts/update-copyrights. 2016-01-04 16:05:18 +00:00
freopen64.c Update copyright dates with scripts/update-copyrights. 2016-01-04 16:05:18 +00:00
freopen.c Update copyright dates with scripts/update-copyrights. 2016-01-04 16:05:18 +00:00
fseek.c Update copyright dates with scripts/update-copyrights. 2016-01-04 16:05:18 +00:00
fseeko64.c Update copyright dates with scripts/update-copyrights. 2016-01-04 16:05:18 +00:00
fseeko.c Update copyright dates with scripts/update-copyrights. 2016-01-04 16:05:18 +00:00
ftello64.c Update copyright dates with scripts/update-copyrights. 2016-01-04 16:05:18 +00:00
ftello.c Update copyright dates with scripts/update-copyrights. 2016-01-04 16:05:18 +00:00
fwide.c Update copyright dates with scripts/update-copyrights. 2016-01-04 16:05:18 +00:00
fwprintf.c Update copyright dates with scripts/update-copyrights. 2016-01-04 16:05:18 +00:00
fwscanf.c Update copyright dates with scripts/update-copyrights. 2016-01-04 16:05:18 +00:00
genops.c libio: Implement vtable verification [BZ #20191] 2016-06-23 20:01:52 +02:00
getc_u.c Update copyright dates with scripts/update-copyrights. 2016-01-04 16:05:18 +00:00
getc.c Update copyright dates with scripts/update-copyrights. 2016-01-04 16:05:18 +00:00
getchar_u.c Update copyright dates with scripts/update-copyrights. 2016-01-04 16:05:18 +00:00
getchar.c Update copyright dates with scripts/update-copyrights. 2016-01-04 16:05:18 +00:00
getwc_u.c Update copyright dates with scripts/update-copyrights. 2016-01-04 16:05:18 +00:00
getwc.c Update copyright dates with scripts/update-copyrights. 2016-01-04 16:05:18 +00:00
getwchar_u.c Update copyright dates with scripts/update-copyrights. 2016-01-04 16:05:18 +00:00
getwchar.c Update copyright dates with scripts/update-copyrights. 2016-01-04 16:05:18 +00:00
iofclose.c Update copyright dates with scripts/update-copyrights. 2016-01-04 16:05:18 +00:00
iofdopen.c libio: Implement vtable verification [BZ #20191] 2016-06-23 20:01:52 +02:00
iofflush_u.c Update copyright dates with scripts/update-copyrights. 2016-01-04 16:05:18 +00:00
iofflush.c Update copyright dates with scripts/update-copyrights. 2016-01-04 16:05:18 +00:00
iofgetpos64.c Update copyright dates with scripts/update-copyrights. 2016-01-04 16:05:18 +00:00
iofgetpos.c Update copyright dates with scripts/update-copyrights. 2016-01-04 16:05:18 +00:00
iofgets_u.c Update copyright dates with scripts/update-copyrights. 2016-01-04 16:05:18 +00:00
iofgets.c Update copyright dates with scripts/update-copyrights. 2016-01-04 16:05:18 +00:00
iofgetws_u.c Update copyright dates with scripts/update-copyrights. 2016-01-04 16:05:18 +00:00
iofgetws.c Update copyright dates with scripts/update-copyrights. 2016-01-04 16:05:18 +00:00
iofopen64.c Update copyright dates with scripts/update-copyrights. 2016-01-04 16:05:18 +00:00
iofopen.c libio: Implement vtable verification [BZ #20191] 2016-06-23 20:01:52 +02:00
iofopncook.c hurd: Fix PTR_{,DE}MANGLE calls 2016-07-06 11:48:56 +02:00
iofputs_u.c Update copyright dates with scripts/update-copyrights. 2016-01-04 16:05:18 +00:00
iofputs.c Update copyright dates with scripts/update-copyrights. 2016-01-04 16:05:18 +00:00
iofputws_u.c Update copyright dates with scripts/update-copyrights. 2016-01-04 16:05:18 +00:00
iofputws.c Update copyright dates with scripts/update-copyrights. 2016-01-04 16:05:18 +00:00
iofread_u.c Update copyright dates with scripts/update-copyrights. 2016-01-04 16:05:18 +00:00
iofread.c Update copyright dates with scripts/update-copyrights. 2016-01-04 16:05:18 +00:00
iofsetpos64.c Update copyright dates with scripts/update-copyrights. 2016-01-04 16:05:18 +00:00
iofsetpos.c Update copyright dates with scripts/update-copyrights. 2016-01-04 16:05:18 +00:00
ioftell.c Update copyright dates with scripts/update-copyrights. 2016-01-04 16:05:18 +00:00
iofwide.c Update copyright dates with scripts/update-copyrights. 2016-01-04 16:05:18 +00:00
iofwrite_u.c Update copyright dates with scripts/update-copyrights. 2016-01-04 16:05:18 +00:00
iofwrite.c Update copyright dates with scripts/update-copyrights. 2016-01-04 16:05:18 +00:00
iogetdelim.c Update copyright dates with scripts/update-copyrights. 2016-01-04 16:05:18 +00:00
iogetline.c Update copyright dates with scripts/update-copyrights. 2016-01-04 16:05:18 +00:00
iogets.c Update copyright dates with scripts/update-copyrights. 2016-01-04 16:05:18 +00:00
iogetwline.c Update copyright dates with scripts/update-copyrights. 2016-01-04 16:05:18 +00:00
iolibio.h
iopadn.c Update copyright dates with scripts/update-copyrights. 2016-01-04 16:05:18 +00:00
iopopen.c libio: Implement vtable verification [BZ #20191] 2016-06-23 20:01:52 +02:00
ioputs.c Update copyright dates with scripts/update-copyrights. 2016-01-04 16:05:18 +00:00
ioseekoff.c Update copyright dates with scripts/update-copyrights. 2016-01-04 16:05:18 +00:00
ioseekpos.c Update copyright dates with scripts/update-copyrights. 2016-01-04 16:05:18 +00:00
iosetbuffer.c Update copyright dates with scripts/update-copyrights. 2016-01-04 16:05:18 +00:00
iosetvbuf.c Update copyright dates with scripts/update-copyrights. 2016-01-04 16:05:18 +00:00
ioungetc.c Update copyright dates with scripts/update-copyrights. 2016-01-04 16:05:18 +00:00
ioungetwc.c Update copyright dates with scripts/update-copyrights. 2016-01-04 16:05:18 +00:00
iovdprintf.c libio: Implement vtable verification [BZ #20191] 2016-06-23 20:01:52 +02:00
iovsprintf.c Update copyright dates with scripts/update-copyrights. 2016-01-04 16:05:18 +00:00
iovsscanf.c Update copyright dates with scripts/update-copyrights. 2016-01-04 16:05:18 +00:00
iovswscanf.c Update copyright dates with scripts/update-copyrights. 2016-01-04 16:05:18 +00:00
iowpadn.c Update copyright dates with scripts/update-copyrights. 2016-01-04 16:05:18 +00:00
libc_fatal.c Update copyright dates with scripts/update-copyrights. 2016-01-04 16:05:18 +00:00
libio.h Update copyright dates with scripts/update-copyrights. 2016-01-04 16:05:18 +00:00
libioP.h hurd: Fix PTR_{,DE}MANGLE calls 2016-07-06 11:48:56 +02:00
Makefile libio: Implement vtable verification [BZ #20191] 2016-06-23 20:01:52 +02:00
memstream.c libio: Implement vtable verification [BZ #20191] 2016-06-23 20:01:52 +02:00
obprintf.c libio: Implement vtable verification [BZ #20191] 2016-06-23 20:01:52 +02:00
oldfileops.c libio: Implement vtable verification [BZ #20191] 2016-06-23 20:01:52 +02:00
oldfmemopen.c Update copyright dates with scripts/update-copyrights. 2016-01-04 16:05:18 +00:00
oldiofclose.c Update copyright dates with scripts/update-copyrights. 2016-01-04 16:05:18 +00:00
oldiofdopen.c libio: Implement vtable verification [BZ #20191] 2016-06-23 20:01:52 +02:00
oldiofgetpos64.c Update copyright dates with scripts/update-copyrights. 2016-01-04 16:05:18 +00:00
oldiofgetpos.c Update copyright dates with scripts/update-copyrights. 2016-01-04 16:05:18 +00:00
oldiofopen.c libio: Implement vtable verification [BZ #20191] 2016-06-23 20:01:52 +02:00
oldiofsetpos64.c Update copyright dates with scripts/update-copyrights. 2016-01-04 16:05:18 +00:00
oldiofsetpos.c Update copyright dates with scripts/update-copyrights. 2016-01-04 16:05:18 +00:00
oldiopopen.c libio: Implement vtable verification [BZ #20191] 2016-06-23 20:01:52 +02:00
oldpclose.c Update copyright dates with scripts/update-copyrights. 2016-01-04 16:05:18 +00:00
oldstdfiles.c Update copyright dates with scripts/update-copyrights. 2016-01-04 16:05:18 +00:00
oldtmpfile.c Update copyright dates with scripts/update-copyrights. 2016-01-04 16:05:18 +00:00
pclose.c Update copyright dates with scripts/update-copyrights. 2016-01-04 16:05:18 +00:00
peekc.c Update copyright dates with scripts/update-copyrights. 2016-01-04 16:05:18 +00:00
putc_u.c Update copyright dates with scripts/update-copyrights. 2016-01-04 16:05:18 +00:00
putc.c Update copyright dates with scripts/update-copyrights. 2016-01-04 16:05:18 +00:00
putchar_u.c Update copyright dates with scripts/update-copyrights. 2016-01-04 16:05:18 +00:00
putchar.c Update copyright dates with scripts/update-copyrights. 2016-01-04 16:05:18 +00:00
putwc_u.c Update copyright dates with scripts/update-copyrights. 2016-01-04 16:05:18 +00:00
putwc.c Update copyright dates with scripts/update-copyrights. 2016-01-04 16:05:18 +00:00
putwchar_u.c Update copyright dates with scripts/update-copyrights. 2016-01-04 16:05:18 +00:00
putwchar.c Update copyright dates with scripts/update-copyrights. 2016-01-04 16:05:18 +00:00
rewind.c Update copyright dates with scripts/update-copyrights. 2016-01-04 16:05:18 +00:00
setbuf.c Update copyright dates with scripts/update-copyrights. 2016-01-04 16:05:18 +00:00
setlinebuf.c Update copyright dates with scripts/update-copyrights. 2016-01-04 16:05:18 +00:00
stdfiles.c Update copyright dates with scripts/update-copyrights. 2016-01-04 16:05:18 +00:00
stdio.c Update copyright dates with scripts/update-copyrights. 2016-01-04 16:05:18 +00:00
stdio.h Support __STDC_WANT_LIB_EXT2__ feature test macro. 2016-08-02 17:40:35 +00:00
strfile.h Update copyright dates with scripts/update-copyrights. 2016-01-04 16:05:18 +00:00
strops.c libio: Implement vtable verification [BZ #20191] 2016-06-23 20:01:52 +02:00
swprintf.c Update copyright dates with scripts/update-copyrights. 2016-01-04 16:05:18 +00:00
swscanf.c Update copyright dates with scripts/update-copyrights. 2016-01-04 16:05:18 +00:00
test-fmemopen.c Update copyright dates with scripts/update-copyrights. 2016-01-04 16:05:18 +00:00
test-freopen.c Update copyright dates with scripts/update-copyrights. 2016-01-04 16:05:18 +00:00
test-freopen.sh Make shebang interpreter directives consistent 2016-01-07 04:03:21 -05:00
tst_getwc.c Update copyright dates with scripts/update-copyrights. 2016-01-04 16:05:18 +00:00
tst_getwc.input
tst_putwc.c Update copyright dates with scripts/update-copyrights. 2016-01-04 16:05:18 +00:00
tst_swprintf.c
tst_swscanf.c
tst_wprintf2.c Add dependencies on needed locales in each subdir tests (bug 18969) 2015-10-12 15:18:08 +02:00
tst_wprintf.c
tst_wscanf.c
tst_wscanf.input
tst-atime.c Fix libio/tst-atime not to presume ST_NOATIME exists. 2015-02-06 12:24:16 -08:00
tst-eof.c
tst-ext2.c
tst-ext.c
tst-fgetwc.c
tst-fgetwc.input
tst-fgetws.c
tst-fopenloc2.c
tst-fopenloc.c 2016-06-11 Paul Pluzhnikov <ppluzhnikov@google.com> 2016-06-11 14:50:16 -07:00
tst-fputws.c Update copyright dates with scripts/update-copyrights. 2016-01-04 16:05:18 +00:00
tst-freopen.c Update copyright dates with scripts/update-copyrights. 2016-01-04 16:05:18 +00:00
tst-fseek.c Update copyright dates with scripts/update-copyrights. 2016-01-04 16:05:18 +00:00
tst-ftell-active-handler.c Update copyright dates with scripts/update-copyrights. 2016-01-04 16:05:18 +00:00
tst-ftell-append.c Update copyright dates with scripts/update-copyrights. 2016-01-04 16:05:18 +00:00
tst-ftell-partial-wide.c Update copyright dates with scripts/update-copyrights. 2016-01-04 16:05:18 +00:00
tst-fwrite-error.c Update copyright dates with scripts/update-copyrights. 2016-01-04 16:05:18 +00:00
tst-memstream1.c
tst-memstream2.c Adjust timeouts for some tests, to accommodate slow processors, 2015-02-22 01:05:02 -08:00
tst-mmap2-eofsync.c 2016-06-11 Paul Pluzhnikov <ppluzhnikov@google.com> 2016-06-11 14:50:16 -07:00
tst-mmap-eofsync.c
tst-mmap-fflushsync.c
tst-mmap-offend.c
tst-mmap-setvbuf.c Update copyright dates with scripts/update-copyrights. 2016-01-04 16:05:18 +00:00
tst-popen1.c
tst-setvbuf1.c
tst-sscanf.c Modify several tests to use test-skeleton.c 2014-11-05 15:24:08 +05:30
tst-swscanf.c
tst-ungetwc1.c Modify several tests to use test-skeleton.c 2014-11-05 15:24:08 +05:30
tst-ungetwc2.c Modify several tests to use test-skeleton.c 2014-11-05 15:24:08 +05:30
tst-widetext.c Update copyright dates with scripts/update-copyrights. 2016-01-04 16:05:18 +00:00
tst-widetext.input Rename Oriya locale to Odia (bug 15601) 2013-11-20 17:47:41 +05:30
tst-wmemstream1.c
tst-wmemstream2.c
vasprintf.c Update copyright dates with scripts/update-copyrights. 2016-01-04 16:05:18 +00:00
Versions libio: fmemopen rewrite to POSIX compliance 2015-07-08 12:07:21 -03:00
vscanf.c Update copyright dates with scripts/update-copyrights. 2016-01-04 16:05:18 +00:00
vsnprintf.c libio: Implement vtable verification [BZ #20191] 2016-06-23 20:01:52 +02:00
vswprintf.c libio: Implement vtable verification [BZ #20191] 2016-06-23 20:01:52 +02:00
vtables.c hurd: Fix PTR_{,DE}MANGLE calls 2016-07-06 11:48:56 +02:00
vwprintf.c Update copyright dates with scripts/update-copyrights. 2016-01-04 16:05:18 +00:00
vwscanf.c Update copyright dates with scripts/update-copyrights. 2016-01-04 16:05:18 +00:00
wfiledoalloc.c libio: Clean up _IO_file_doallocate and _IO_wfile_doallocate 2016-03-07 17:05:06 +01:00
wfileops.c libio: Implement vtable verification [BZ #20191] 2016-06-23 20:01:52 +02:00
wgenops.c Update copyright dates with scripts/update-copyrights. 2016-01-04 16:05:18 +00:00
wmemstream.c libio: Implement vtable verification [BZ #20191] 2016-06-23 20:01:52 +02:00
wprintf.c Update copyright dates with scripts/update-copyrights. 2016-01-04 16:05:18 +00:00
wscanf.c Update copyright dates with scripts/update-copyrights. 2016-01-04 16:05:18 +00:00
wstrops.c libio: Implement vtable verification [BZ #20191] 2016-06-23 20:01:52 +02:00