make FILE a complete type for pre-C11 standard profiles
authorRich Felker <dalias@aerifal.cx>
Tue, 12 Mar 2019 19:24:00 +0000 (15:24 -0400)
committerRich Felker <dalias@aerifal.cx>
Tue, 12 Mar 2019 19:24:00 +0000 (15:24 -0400)
commitf368d9fd26ae002fe2fce20add4cb2b806f48972
treefc3f6dff04f55277566a5a69c1f2acfb587855b3
parent50cd02386b152bb39a1a9d1edba3fdcda7771a4c
make FILE a complete type for pre-C11 standard profiles

C11 removed the requirement that FILE be a complete type, which was
deemed erroneous, as part of the changes introduced by N1439 regarding
completeness of types (see footnote 6 for specific mention of FILE).
however the current version of POSIX is still based on C99 and
incorporates the old requirement that FILE be a complete type.

expose an arbitrary, useless complete type definition because the
actual object used to represent FILE streams cannot be public/ABI.

thanks to commit 13d1afa46f8098df290008c681816c9eb89ffbdb, we now have
a framework for suppressing the public complete-type definition of FILE
when stdio.h is included internally, so that a different internal
definition can be provided. this is perfectly well-defined, since the
same struct tag can refer to different types in different translation
units. it would be a problem if the implementation were accessing the
application's FILE objects or vice versa, but either would be
undefined behavior.
include/alltypes.h.in
include/stdio.h
include/wchar.h
src/include/stdio.h
src/include/wchar.h [new file with mode: 0644]