mirror of
https://sourceware.org/git/glibc.git
synced 2024-11-23 09:43:32 +08:00
a4fea3f2c3
We shipped 2.27 with libio.h and _G_config.h still installed but issuing warnings when used. Let's stop installing them early in 2.28 so that we have plenty of time to think of another plan if there are problems. The public stdio.h had a genuine dependency on libio.h for the complete definitions of FILE and cookie_io_functions_t, and a genuine dependency on _G_config.h for the complete definitions of fpos_t and fpos64_t; these are moved to single-type headers. bits/types/struct_FILE.h also provides a handful of accessor and bitflags macros so that code is not duplicated between bits/stdio.h and libio.h. All the other _IO_ and _G_ names used by the public stdio.h can be replaced with either public names or __-names. In order to minimize the risk of breaking our own compatibility code, bits/types/struct_FILE.h preserves the _IO_USE_OLD_IO_FILE mechanism exactly as it was in libio.h, but you have to define _LIBC to use it, or it'll error out. Similarly, _IO_lock_t_defined is preserved exactly, but will error out if used without defining _LIBC. Internally, include/stdio.h continues to include libio.h, and libio.h scrupulously provides every _IO_* and _G_* name that it always did, perhaps now defined in terms of the public names. This is how this patch avoids touching dozens of files throughout glibc and becoming entangled with the _IO_MTSAFE_IO mess. The remaining patches in this series eliminate most of the _G_ names. Tested on x86_64-linux; in addition to the test suite, I installed the library in a sysroot and verified that a simple program that uses stdio.h could be compiled against the installed library, and I also verified that installed stripped libraries are unchanged. * libio/bits/types/__fpos_t.h, libio/bits/types/__fpos64_t.h: New single-type headers split from _G_config.h. * libio/bits/types/cookie_io_functions_t.h * libio/bits/types/struct_FILE.h New single-type headers split from libio.h. * libio/Makefile: Install the above new headers. Don't install libio.h, _G_config.h, bits/libio.h, bits/_G_config.h, or bits/libio-ldbl.h. * libio/_G_config.h, libio/libio.h: Delete file. * libio/bits/libio.h: Remove improper-inclusion guard. Include stdio.h and don't repeat anything that it does. Define _IO_fpos_t as __fpos_t, _IO_fpos64_t as __fpos64_t, _IO_BUFSIZ as BUFSIZ, _IO_va_list as __gnuc_va_list, __io_read_fn as cookie_read_function_t, __io_write_fn as cookie_write_function_t, __io_seek_fn as cookie_seek_function_t, __io_close_fn as cookie_close_function_t, and _IO_cookie_io_functions_t as cookie_io_functions_t. Define _STDIO_USES_IOSTREAM, __HAVE_COLUMN, and _IO_file_flags here, in the "compatibility defines" section. Remove an #if 0 block. Use the "body" macros from bits/types/struct_FILE.h to define _IO_getc_unlocked, _IO_putc_unlocked, _IO_feof_unlocked, and _IO_ferror_unlocked. Move prototypes of __uflow and __overflow... * libio/stdio.h: ...here. Don't include bits/libio.h. Don't define _STDIO_USES_IOSTREAM. Get __gnuc_va_list directly from stdarg.h. Include bits/types/__fpos_t.h, bits/types/__fpos64_t.h, bits/types/struct_FILE.h, and, when __USE_GNU, bits/types/cookie_io_functions_t.h. Use __gnuc_va_list, not _G_va_list; __fpos_t, not _G_fpos_t; __fpos64_t, not _G_fpos64_t; FILE, not struct _IO_FILE; cookie_io_functions_t, not _IO_cookie_io_functions_t; __ssize_t, not _IO_ssize_t. Unconditionally define BUFSIZ as 8192 and EOF as (-1). * libio/bits/stdio.h: Add multiple-include guard. Use the "body" macros from bits/types/struct_FILE.h instead of _IO_* macros from libio.h; use __gnuc_va_list instead of va_list and __ssize_t instead of _IO_ssize_t. * libio/bits/stdio2.h: Similarly. * libio/iolibio.h: Add multiple-include guard. Include bits/libio.h after stdio.h. * libio/libioP.h: Add multiple-include guard. Include stdio.h and bits/libio.h before iolibio.h. * include/bits/types/__fpos_t.h, include/bits/types/__fpos64_t.h * include/bits/types/cookie_io_functions_t.h * include/bits/types/struct_FILE.h: New wrappers. * bits/_G_config.h, sysdeps/unix/sysv/linux/_G_config.h: Get definitions of _G_fpos_t and _G_fpos64_t from bits/types/__fpos_t.h and bits/types/__fpos64_t.h respectively. Remove improper-inclusion guards. * conform/data/stdio.h-data: Update expectations of va_list. * scripts/check-installed-headers.sh: Remove special case for libio.h and _G_config.h.
195 lines
6.1 KiB
Plaintext
195 lines
6.1 KiB
Plaintext
macro-int-constant BUFSIZ >= 256
|
|
macro-int-constant FILENAME_MAX
|
|
macro-int-constant FOPEN_MAX >= 8
|
|
|
|
macro-int-constant _IOFBF
|
|
macro-int-constant _IOLBF
|
|
macro-int-constant _IONBF
|
|
|
|
#if !defined ISO && !defined ISO99 && !defined ISO11
|
|
constant L_ctermid
|
|
# if !defined XOPEN2K && !defined XOPEN2K8 && !defined POSIX2008
|
|
# ifdef POSIX
|
|
optional-constant L_cuserid
|
|
# else
|
|
constant L_cuserid
|
|
# endif
|
|
# endif
|
|
#endif
|
|
macro-int-constant L_tmpnam
|
|
|
|
macro-int-constant SEEK_CUR
|
|
macro-int-constant SEEK_END
|
|
macro-int-constant SEEK_SET
|
|
|
|
macro-int-constant TMP_MAX >= 10000
|
|
|
|
macro-int-constant EOF < 0
|
|
|
|
macro-constant NULL == 0
|
|
|
|
#if !defined ISO && !defined ISO99 && !defined ISO11 && !defined POSIX && !defined POSIX2008
|
|
constant P_tmpdir
|
|
#endif
|
|
|
|
macro stdin {FILE *}
|
|
macro stdout {FILE *}
|
|
macro stderr {FILE *}
|
|
|
|
type FILE
|
|
type fpos_t
|
|
#if !defined ISO && !defined ISO99 && !defined ISO11 && !defined POSIX
|
|
type va_list
|
|
#else
|
|
#define va_list __gnuc_va_list
|
|
#endif
|
|
type size_t
|
|
#if defined XOPEN2K8 || defined POSIX2008
|
|
type off_t
|
|
type ssize_t
|
|
#endif
|
|
|
|
function void clearerr (FILE*)
|
|
#if !defined ISO && !defined ISO99 && !defined ISO11
|
|
function {char*} ctermid (char*)
|
|
# if defined XPG4 || defined XPG42 || defined UNIX98
|
|
function {char*} cuserid (char*)
|
|
# endif
|
|
#endif
|
|
#if defined XOPEN2K8 || defined POSIX2008
|
|
function int dprintf (int, const char*, ...)
|
|
#endif
|
|
function int fclose (FILE*)
|
|
#if !defined ISO && !defined ISO99 && !defined ISO11
|
|
function {FILE*} fdopen (int, const char*)
|
|
#endif
|
|
function int feof (FILE*)
|
|
function int ferror (FILE*)
|
|
function int fflush (FILE*)
|
|
function int fgetc (FILE*)
|
|
function int fgetpos (FILE*, fpos_t*)
|
|
function {char*} fgets (char*, int, FILE*)
|
|
#if !defined ISO && !defined ISO99 && !defined ISO11
|
|
function int fileno (FILE*)
|
|
#endif
|
|
#if defined POSIX || defined UNIX98 || defined XOPEN2K || defined XOPEN2K8 || defined POSIX2008
|
|
function void flockfile (FILE*)
|
|
#endif
|
|
#if defined XOPEN2K8 || defined POSIX2008
|
|
function {FILE*} fmemopen (void*, size_t, const char*)
|
|
#endif
|
|
function {FILE*} fopen (const char*, const char*)
|
|
function int fprintf (FILE*, const char*, ...)
|
|
function int fputc (int, FILE*)
|
|
function int fputs (const char*, FILE*)
|
|
function size_t fread (void*, size_t, size_t, FILE*)
|
|
function {FILE*} freopen (const char*, const char*, FILE*)
|
|
function int fscanf (FILE*, const char*, ...)
|
|
function int fseek (FILE*, long int, int)
|
|
#if defined UNIX98 || defined XOPEN2K || defined XOPEN2K8 || defined POSIX2008
|
|
function int fseeko (FILE*, off_t, int)
|
|
#endif
|
|
function int fsetpos (FILE*, const fpos_t*)
|
|
function {long int} ftell (FILE*)
|
|
#if defined UNIX98 || defined XOPEN2K || defined XOPEN2K8 || defined POSIX2008
|
|
function off_t ftello (FILE*)
|
|
#endif
|
|
#if defined POSIX || defined UNIX98 || defined XOPEN2K || defined XOPEN2K8 || defined POSIX2008
|
|
function int ftrylockfile (FILE*)
|
|
function void funlockfile (FILE*)
|
|
#endif
|
|
function size_t fwrite (const void*, size_t, size_t, FILE*)
|
|
function int getc (FILE*)
|
|
function int getchar (void)
|
|
#if defined POSIX || defined UNIX98 || defined XOPEN2K || defined XOPEN2K8 || defined POSIX2008
|
|
function int getc_unlocked (FILE*)
|
|
function int getchar_unlocked (void)
|
|
#endif
|
|
#if defined XOPEN2K8 || defined POSIX2008
|
|
function ssize_t getdelim (char**, size_t*, int, FILE*)
|
|
function ssize_t getline (char**, size_t*, FILE*)
|
|
#endif
|
|
#if defined XPG4 || defined XPG42 || defined UNIX98
|
|
function int getopt (int, char *const[], const char *)
|
|
#endif
|
|
#if !defined ISO11
|
|
function {char*} gets (char*)
|
|
#endif
|
|
#if defined XPG4 || defined XPG42 || defined UNIX98
|
|
function int getw (FILE*)
|
|
#endif
|
|
#if defined XOPEN2K8 || defined POSIX2008
|
|
function {FILE*} open_memstream (char**, size_t*)
|
|
#endif
|
|
#if !defined ISO && !defined ISO99 && !defined ISO11
|
|
function int pclose (FILE*)
|
|
#endif
|
|
function void perror (const char*)
|
|
#if !defined ISO && !defined ISO99 && !defined ISO11
|
|
function {FILE*} popen (const char*, const char*)
|
|
#endif
|
|
function int printf (const char*, ...)
|
|
function int putc (int, FILE*)
|
|
function int putchar (int)
|
|
#if defined POSIX || defined UNIX98 || defined XOPEN2K || defined XOPEN2K8 || defined POSIX2008
|
|
function int putc_unlocked (int, FILE*)
|
|
function int putchar_unlocked (int)
|
|
#endif
|
|
function int puts (const char*)
|
|
#if defined XPG4 || defined XPG42 || defined UNIX98
|
|
function int putw (int, FILE*)
|
|
#endif
|
|
function int remove (const char*)
|
|
function int rename (const char*, const char*)
|
|
#if defined XOPEN2K8 || defined POSIX2008
|
|
function int renameat (int, const char*, int, const char*)
|
|
#endif
|
|
function void rewind (FILE*)
|
|
function int scanf (const char*, ...)
|
|
function void setbuf (FILE*, char*)
|
|
function int setvbuf (FILE*, char*, int, size_t)
|
|
#if !defined ISO && !defined POSIX && !defined XPG4 && !defined XPG42
|
|
function int snprintf (char*, size_t, const char*, ...)
|
|
#endif
|
|
function int sprintf (char *, const char *, ...)
|
|
function int sscanf (const char*, const char*, ...)
|
|
#if defined XPG4 || defined XPG42 || defined UNIX98 || defined XOPEN2K || defined XOPEN2K8
|
|
function {char*} tempnam (const char*, const char*)
|
|
#endif
|
|
function {FILE*} tmpfile (void)
|
|
function {char*} tmpnam (char*)
|
|
function int ungetc (int, FILE*)
|
|
#if defined XOPEN2K8 || defined POSIX2008
|
|
function int vdprintf (int, const char*, va_list)
|
|
#endif
|
|
function int vfprintf (FILE*, const char*, va_list)
|
|
#if !defined ISO && !defined POSIX && !defined XPG4 && !defined XPG42 && !defined UNIX98
|
|
function int vfscanf (FILE*, const char*, va_list)
|
|
#endif
|
|
function int vprintf (const char*, va_list)
|
|
#if !defined ISO && !defined POSIX && !defined XPG4 && !defined XPG42 && !defined UNIX98
|
|
function int vscanf (const char*, va_list)
|
|
#endif
|
|
#if !defined ISO && !defined POSIX && !defined XPG4 && !defined XPG42
|
|
function int vsnprintf (char*, size_t, const char*, va_list)
|
|
#endif
|
|
function int vsprintf (char*, const char*, va_list)
|
|
#if !defined ISO && !defined POSIX && !defined XPG4 && !defined XPG42 && !defined UNIX98
|
|
function int vsscanf (const char*, const char*, va_list)
|
|
#endif
|
|
|
|
#if !defined ISO && !defined ISO99 && !defined ISO11
|
|
#if !defined POSIX && !defined XOPEN2K && !defined XOPEN2K8 && !defined POSIX2008
|
|
variable {char*} optarg
|
|
variable int opterr
|
|
variable int optind
|
|
variable int optopt
|
|
#endif
|
|
|
|
#if !defined POSIX
|
|
allow-header stddef.h
|
|
#endif
|
|
|
|
allow *_t
|
|
#endif
|