glibc/conform/data/stdio.h-data
Zack Weinberg a4fea3f2c3 Don't install libio.h or _G_config.h.
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.
2018-02-07 10:07:31 -05:00

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