mirror of
git://git.musl-libc.org/musl
synced 2025-01-19 05:10:52 +00:00
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 13d1afa46f
, 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.
This commit is contained in:
parent
50cd02386b
commit
f368d9fd26
@ -57,6 +57,7 @@ TYPEDEF struct { unsigned __attr; } pthread_condattr_t;
|
||||
TYPEDEF struct { unsigned __attr; } pthread_barrierattr_t;
|
||||
TYPEDEF struct { unsigned __attr[2]; } pthread_rwlockattr_t;
|
||||
|
||||
STRUCT _IO_FILE { char __x; };
|
||||
TYPEDEF struct _IO_FILE FILE;
|
||||
|
||||
TYPEDEF struct __mbstate_t { unsigned __opaque1, __opaque2; } mbstate_t;
|
||||
|
@ -11,6 +11,10 @@ extern "C" {
|
||||
#define __NEED___isoc_va_list
|
||||
#define __NEED_size_t
|
||||
|
||||
#if __STDC_VERSION__ < 201112L
|
||||
#define __NEED_struct__IO_FILE
|
||||
#endif
|
||||
|
||||
#if defined(_POSIX_SOURCE) || defined(_POSIX_C_SOURCE) \
|
||||
|| defined(_XOPEN_SOURCE) || defined(_GNU_SOURCE) \
|
||||
|| defined(_BSD_SOURCE)
|
||||
|
@ -14,6 +14,10 @@ extern "C" {
|
||||
#define __NEED_wint_t
|
||||
#define __NEED_mbstate_t
|
||||
|
||||
#if __STDC_VERSION__ < 201112L
|
||||
#define __NEED_struct__IO_FILE
|
||||
#endif
|
||||
|
||||
#if defined(_POSIX_SOURCE) || defined(_POSIX_C_SOURCE) \
|
||||
|| defined(_XOPEN_SOURCE) || defined(_GNU_SOURCE) || defined(_BSD_SOURCE)
|
||||
#define __NEED_locale_t
|
||||
|
@ -1,6 +1,8 @@
|
||||
#ifndef STDIO_H
|
||||
#define STDIO_H
|
||||
|
||||
#define __DEFINED_struct__IO_FILE
|
||||
|
||||
#include "../../include/stdio.h"
|
||||
|
||||
#undef stdin
|
||||
|
9
src/include/wchar.h
Normal file
9
src/include/wchar.h
Normal file
@ -0,0 +1,9 @@
|
||||
#ifndef WCHAR_H
|
||||
#define WCHAR_H
|
||||
|
||||
#define __DEFINED_struct__IO_FILE
|
||||
|
||||
#include "../../include/wchar.h"
|
||||
|
||||
#endif
|
||||
|
Loading…
Reference in New Issue
Block a user