This is the mail archive of the glibc-cvs@sourceware.org mailing list for the glibc project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

GNU C Library master sources branch master updated. glibc-2.27.9000-47-g63fb8f9


This is an automated email from the git hooks/post-receive script. It was
generated because a ref change was pushed to the repository containing
the project "GNU C Library master sources".

The branch, master has been updated
       via  63fb8f9aa9d19f85599afe4b849b567aefd70a36 (commit)
       via  6c6c962a202299b55d180e04f44a63ffb748096c (commit)
       via  a4fea3f2c3253b9ae6ffacd3747034ccbe56bc60 (commit)
      from  8b4a118222c7ed41bc653943b542915946dff1dd (commit)

Those revisions listed above that are new to this repository have
not appeared on any other notification email; so we list those
revisions in full, below.

- Log -----------------------------------------------------------------
http://sourceware.org/git/gitweb.cgi?p=glibc.git;a=commitdiff;h=63fb8f9aa9d19f85599afe4b849b567aefd70a36

commit 63fb8f9aa9d19f85599afe4b849b567aefd70a36
Author: Zack Weinberg <zackw@panix.com>
Date:   Mon Feb 5 14:13:41 2018 -0500

    Post-cleanup 2: minimize _G_config.h.
    
    Nearly everything in _G_config.h is either junk or more appropriately
    defined elsewhere:
    
     * _G_fpos_t, _G_fpos64_t, and _G_BUFSIZ are already completely unused.
     * All remaining uses of _G_va_list have been changed to __gnuc_va_list.
     * The definition of _G_HAVE_ST_BLKSIZE/_IO_HAVE_ST_BLKSIZE has
       been inlined into its sole use.
     * The complete definition of _G_iconv_t has been moved to libio.h and
       renamed _IO_iconv_t (all actual users used that name).
     * _G_IO_IO_FILE_VERSION is vestigial; some code cares whether
       _IO_stdin_used exists, but nothing looks at its value.  I've
       preserved the value as a hardwired constant in csu/init.c.
       This means csu/init.c no longer needs to include anything.
     * Many of the headers included by _G_config.h were already being
       included directly by either either libio.h or stdio.h; the
       remaining ones were moved to libio.h.
     * _G_HAVE_MREMAP is still relevant, because mremap genuinely is a
       Linux extension; it's not in POSIX and as far as I can tell it's
       not available on the Hurd either.  I also preserved _G_HAVE_MMAP,
       since it's conceivable someone would want to port glibc to a
       MMU-less, mmap-less environment in the future.  Both are now always
       defined to 1/0 as is the current convention, instead of the older
       1/undef convention.  These are the only symbols still defined in
       _G_config.h.
     * The actual inclusion of _G_config.h moves from libio.h to libioP.h,
       as this is where a potential override of _G_HAVE_MMAP happens.
     * The #ifdef logic in libioP.h controlling _IO_JUMPS_OFFSET has been
       simplified.
    
    After this patch, the only surviving _G_ symbols are the struct tag
    names _G_fpos_t and _G_fpos64_t, which are preserved for the sake of
    C++ mangled names in applications, and _G_HAVE_MMAP and _G_HAVE_MREMAP,
    which do not seem worth renaming.
    
    Installed stripped libraries are unchanged by this patch.
    
    	* bits/_G_config.h: Move back to sysdeps/generic/_G_config.h.
    	Delete all contents except for definitions of _G_HAVE_MMAP and
    	_G_HAVE_MREMAP.  Add commentary explaining those two symbols.
    	* sysdeps/unix/sysv/linux/bits/_G_config.h: Move back to
    	sysdeps/unix/sysv/linux/_G_config.h.  Make same content
    	change as above.
    
    	* libio/libio.h: Don't include bits/_G_config.h here.
    	Include stddef.h with __need_wchar_t defined.  Include
    	bits/types/__mbstate_t.h, bits/types/wint_t.h, and gconv.h.
    	Define _IO_iconv_t here, directly.
    	Don't define _IO_HAVE_ST_BLKSIZE.
    	* libio/libioP.h: Include _G_config.h here.  Move include of
    	shlib-compat.h up with rest of includes.  Simplify conditionals
    	controlling definition of _IO_JUMPS_OFFSET.
    
    	* csu/init.c: Remove always-true #if around entire file.
    	Don't include stdio.h.  Set _IO_stdin_used to hardwired
    	constant 0x20001, and update commentary.
    	* include/stdio.h, sysdeps/ieee754/ldbl-opt/nldbl-compat.h:
    	Replace all uses of _G_va_list with __gnuc_va_list.
    	* libio/filedoalloc.c: Use #if defined _STATBUF_ST_BLKSIZE
    	instead of #if _IO_HAVE_ST_BLKSIZE.
    	* libio/fileops.c: Test _G_HAVE_MREMAP with #if, not #ifdef.
    	* libio/iofdopen.c, libio/iofopen.c: Test _G_HAVE_MMAP with #if,
    	not #ifdef.

diff --git a/ChangeLog b/ChangeLog
index 1f661e1..41e870c 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,5 +1,32 @@
 2018-02-07  Zack Weinberg  <zackw@panix.com>
 
+	* bits/_G_config.h: Move back to sysdeps/generic/_G_config.h.
+	Delete all contents except for definitions of _G_HAVE_MMAP and
+	_G_HAVE_MREMAP.  Add commentary explaining those two symbols.
+	* sysdeps/unix/sysv/linux/bits/_G_config.h: Move back to
+	sysdeps/unix/sysv/linux/_G_config.h.  Make same content
+	change as above.
+
+	* libio/libio.h: Don't include bits/_G_config.h here.
+	Include stddef.h with __need_wchar_t defined.  Include
+	bits/types/__mbstate_t.h, bits/types/wint_t.h, and gconv.h.
+	Define _IO_iconv_t here, directly.
+	Don't define _IO_HAVE_ST_BLKSIZE.
+	* libio/libioP.h: Include _G_config.h here.  Move include of
+	shlib-compat.h up with rest of includes.  Simplify conditionals
+	controlling definition of _IO_JUMPS_OFFSET.
+
+	* csu/init.c: Remove always-true #if around entire file.
+	Don't include stdio.h.  Set _IO_stdin_used to hardwired
+	constant 0x20001, and update commentary.
+	* include/stdio.h, sysdeps/ieee754/ldbl-opt/nldbl-compat.h:
+	Replace all uses of _G_va_list with __gnuc_va_list.
+	* libio/filedoalloc.c: Use #if defined _STATBUF_ST_BLKSIZE
+	instead of #if _IO_HAVE_ST_BLKSIZE.
+	* libio/fileops.c: Test _G_HAVE_MREMAP with #if, not #ifdef.
+	* libio/iofdopen.c, libio/iofopen.c: Test _G_HAVE_MMAP with #if,
+	not #ifdef.
+
 	* libio/bits/libio.h: Move back to libio/libio.h and adjust
 	multiple-include guard to match.
 	Merge contents of libio/bits/libio-ldbl.h and include/libio.h
diff --git a/bits/_G_config.h b/bits/_G_config.h
deleted file mode 100644
index 8c81bc4..0000000
--- a/bits/_G_config.h
+++ /dev/null
@@ -1,54 +0,0 @@
-/* This file is needed by libio to define various configuration parameters.
-   These are always the same in the GNU C library.  */
-
-#ifndef _BITS_G_CONFIG_H
-#define _BITS_G_CONFIG_H 1
-
-/* Define types for libio in terms of the standard internal type names.  */
-
-#include <bits/types.h>
-#define __need_size_t
-#if defined _LIBC || defined _GLIBCPP_USE_WCHAR_T
-# define __need_wchar_t
-#endif
-#define __need_NULL
-#include <stddef.h>
-
-#include <bits/types/__mbstate_t.h>
-#include <bits/types/__fpos_t.h>
-#include <bits/types/__fpos64_t.h>
-
-#define _G_fpos_t __fpos_t
-#define _G_fpos64_t __fpos64_t
-
-#if defined _LIBC || defined _GLIBCPP_USE_WCHAR_T
-# include <bits/types/wint_t.h>
-#endif
-
-#if defined _LIBC || defined _GLIBCPP_USE_WCHAR_T
-# include <gconv.h>
-typedef union
-{
-  struct __gconv_info __cd;
-  struct
-  {
-    struct __gconv_info __cd;
-    struct __gconv_step_data __data;
-  } __combined;
-} _G_iconv_t;
-#endif
-
-
-/* These library features are always available in the GNU C library.  */
-#define _G_va_list __gnuc_va_list
-
-#define _G_HAVE_MMAP 1
-
-#define _G_IO_IO_FILE_VERSION 0x20001
-
-/* This is defined by <bits/stat.h> if `st_blksize' exists.  */
-#define _G_HAVE_ST_BLKSIZE defined (_STATBUF_ST_BLKSIZE)
-
-#define _G_BUFSIZ 8192
-
-#endif	/* bits/_G_config.h */
diff --git a/csu/init.c b/csu/init.c
index 178063b..c2f978f 100644
--- a/csu/init.c
+++ b/csu/init.c
@@ -16,11 +16,8 @@
    License along with the GNU C Library; if not, see
    <http://www.gnu.org/licenses/>.  */
 
-#if defined __GNUC__ && __GNUC__ >= 2
-
-#include <stdio.h>
-
-/* This records which stdio is linked against in the application. */
-const int _IO_stdin_used = _G_IO_IO_FILE_VERSION;
-
-#endif
+/* Vestigial libio version number.  Some code in libio checks whether
+   this symbol exists in the executable, but nothing looks at its
+   value anymore; the value it was historically set to has been
+   preserved out of an abundance of caution.  */
+const int _IO_stdin_used = 0x20001;
diff --git a/include/stdio.h b/include/stdio.h
index f12b281..94bc2fd 100644
--- a/include/stdio.h
+++ b/include/stdio.h
@@ -15,44 +15,44 @@ extern int __snprintf (char *__restrict __s, size_t __maxlen,
      __attribute__ ((__format__ (__printf__, 3, 4)));
 libc_hidden_proto (__snprintf)
 extern int __vsnprintf (char *__restrict __s, size_t __maxlen,
-			const char *__restrict __format, _G_va_list __arg)
+			const char *__restrict __format, __gnuc_va_list __arg)
      __attribute__ ((__format__ (__printf__, 3, 0)));
 extern int __vfscanf (FILE *__restrict __s,
 		      const char *__restrict __format,
-		      _G_va_list __arg)
+		      __gnuc_va_list __arg)
      __attribute__ ((__format__ (__scanf__, 2, 0)));
 libc_hidden_proto (__vfscanf)
 extern int __vscanf (const char *__restrict __format,
-		     _G_va_list __arg)
+		     __gnuc_va_list __arg)
      __attribute__ ((__format__ (__scanf__, 1, 0)));
 extern _IO_ssize_t __getline (char **__lineptr, size_t *__n,
 			      FILE *__stream) attribute_hidden;
 extern int __vsscanf (const char *__restrict __s,
 		      const char *__restrict __format,
-		      _G_va_list __arg)
+		      __gnuc_va_list __arg)
      __attribute__ ((__format__ (__scanf__, 2, 0)));
 
 extern int __sprintf_chk (char *, int, size_t, const char *, ...) __THROW;
 extern int __snprintf_chk (char *, size_t, int, size_t, const char *, ...)
      __THROW;
 extern int __vsprintf_chk (char *, int, size_t, const char *,
-			   _G_va_list) __THROW;
+			   __gnuc_va_list) __THROW;
 extern int __vsnprintf_chk (char *, size_t, int, size_t, const char *,
-			    _G_va_list) __THROW;
+			    __gnuc_va_list) __THROW;
 extern int __printf_chk (int, const char *, ...);
 extern int __fprintf_chk (FILE *, int, const char *, ...);
-extern int __vprintf_chk (int, const char *, _G_va_list);
-extern int __vfprintf_chk (FILE *, int, const char *, _G_va_list);
+extern int __vprintf_chk (int, const char *, __gnuc_va_list);
+extern int __vfprintf_chk (FILE *, int, const char *, __gnuc_va_list);
 extern char *__fgets_unlocked_chk (char *buf, size_t size, int n, FILE *fp);
 extern char *__fgets_chk (char *buf, size_t size, int n, FILE *fp);
 extern int __asprintf_chk (char **, int, const char *, ...) __THROW;
-extern int __vasprintf_chk (char **, int, const char *, _G_va_list) __THROW;
+extern int __vasprintf_chk (char **, int, const char *, __gnuc_va_list) __THROW;
 extern int __dprintf_chk (int, int, const char *, ...);
-extern int __vdprintf_chk (int, int, const char *, _G_va_list);
+extern int __vdprintf_chk (int, int, const char *, __gnuc_va_list);
 extern int __obstack_printf_chk (struct obstack *, int, const char *, ...)
      __THROW;
 extern int __obstack_vprintf_chk (struct obstack *, int, const char *,
-				  _G_va_list) __THROW;
+				  __gnuc_va_list) __THROW;
 
 extern int __isoc99_fscanf (FILE *__restrict __stream,
 			    const char *__restrict __format, ...) __wur;
@@ -61,12 +61,12 @@ extern int __isoc99_sscanf (const char *__restrict __s,
 			    const char *__restrict __format, ...) __THROW;
 extern int __isoc99_vfscanf (FILE *__restrict __s,
 			     const char *__restrict __format,
-			     _G_va_list __arg) __wur;
+			     __gnuc_va_list __arg) __wur;
 extern int __isoc99_vscanf (const char *__restrict __format,
-			    _G_va_list __arg) __wur;
+			    __gnuc_va_list __arg) __wur;
 extern int __isoc99_vsscanf (const char *__restrict __s,
 			     const char *__restrict __format,
-			     _G_va_list __arg) __THROW;
+			     __gnuc_va_list __arg) __THROW;
 libc_hidden_proto (__isoc99_vsscanf)
 libc_hidden_proto (__isoc99_vfscanf)
 
diff --git a/libio/filedoalloc.c b/libio/filedoalloc.c
index 3298438..d6517e4 100644
--- a/libio/filedoalloc.c
+++ b/libio/filedoalloc.c
@@ -93,7 +93,7 @@ _IO_file_doallocate (_IO_FILE *fp)
 	      local_isatty (fp->_fileno))
 	    fp->_flags |= _IO_LINE_BUF;
 	}
-#if _IO_HAVE_ST_BLKSIZE
+#if defined _STATBUF_ST_BLKSIZE
       if (st.st_blksize > 0 && st.st_blksize < _IO_BUFSIZ)
 	size = st.st_blksize;
 #endif
diff --git a/libio/fileops.c b/libio/fileops.c
index 6d5393c..5fd8a96 100644
--- a/libio/fileops.c
+++ b/libio/fileops.c
@@ -582,7 +582,7 @@ mmap_remap_check (_IO_FILE *fp)
 	{
 	  /* The file added some pages.  We need to remap it.  */
 	  void *p;
-#ifdef _G_HAVE_MREMAP
+#if _G_HAVE_MREMAP
 	  p = __mremap (fp->_IO_buf_base, ROUNDED (fp->_IO_buf_end
 						   - fp->_IO_buf_base),
 			ROUNDED (st.st_size), MREMAP_MAYMOVE);
diff --git a/libio/iofdopen.c b/libio/iofdopen.c
index 3546d52..b6f1500 100644
--- a/libio/iofdopen.c
+++ b/libio/iofdopen.c
@@ -126,13 +126,13 @@ _IO_new_fdopen (int fd, const char *mode)
   new_f->fp.file._lock = &new_f->lock;
 #endif
   _IO_no_init (&new_f->fp.file, 0, 0, &new_f->wd,
-#ifdef _G_HAVE_MMAP
+#if _G_HAVE_MMAP
 	       (use_mmap && (read_write & _IO_NO_WRITES))
 	       ? &_IO_wfile_jumps_maybe_mmap :
 #endif
 	       &_IO_wfile_jumps);
   _IO_JUMPS (&new_f->fp) =
-#ifdef _G_HAVE_MMAP
+#if _G_HAVE_MMAP
     (use_mmap && (read_write & _IO_NO_WRITES)) ? &_IO_file_jumps_maybe_mmap :
 #endif
       &_IO_file_jumps;
diff --git a/libio/iofopen.c b/libio/iofopen.c
index d6f5949..2ea82e2 100644
--- a/libio/iofopen.c
+++ b/libio/iofopen.c
@@ -33,7 +33,7 @@
 _IO_FILE *
 __fopen_maybe_mmap (_IO_FILE *fp)
 {
-#ifdef _G_HAVE_MMAP
+#if _G_HAVE_MMAP
   if ((fp->_flags2 & _IO_FLAGS2_MMAP) && (fp->_flags & _IO_NO_WRITES))
     {
       /* Since this is read-only, we might be able to mmap the contents
diff --git a/libio/libio.h b/libio/libio.h
index ff67e18..0953120 100644
--- a/libio/libio.h
+++ b/libio/libio.h
@@ -41,8 +41,24 @@
 # error "Someone forgot to include stdio-lock.h"
 #endif
 
-#include <bits/_G_config.h>
-/* ALL of these should be defined in _G_config.h */
+#define __need_wchar_t
+#include <stddef.h>
+
+#include <bits/types/__mbstate_t.h>
+#include <bits/types/wint_t.h>
+#include <gconv.h>
+
+typedef union
+{
+  struct __gconv_info __cd;
+  struct
+  {
+    struct __gconv_info __cd;
+    struct __gconv_step_data __data;
+  } __combined;
+} _IO_iconv_t;
+
+/* Map the names used in libio to the names used in libc generally.  */
 #define _IO_fpos_t __fpos_t
 #define _IO_fpos64_t __fpos64_t
 #define _IO_size_t size_t
@@ -51,8 +67,6 @@
 #define _IO_off64_t __off64_t
 #define _IO_pid_t __pid_t
 #define _IO_uid_t __uid_t
-#define _IO_iconv_t _G_iconv_t
-#define _IO_HAVE_ST_BLKSIZE _G_HAVE_ST_BLKSIZE
 #define _IO_BUFSIZ BUFSIZ
 #define _IO_wint_t wint_t
 #define _IO_va_list __gnuc_va_list
diff --git a/libio/libioP.h b/libio/libioP.h
index 8edc207..58cc9de 100644
--- a/libio/libioP.h
+++ b/libio/libioP.h
@@ -46,6 +46,12 @@
 #include <libio/libio.h>
 #include "iolibio.h"
 
+#include <shlib-compat.h>
+
+/* For historical reasons this is the name of the sysdeps header that
+   adjusts the libio configuration.  */
+#include <_G_config.h>
+
 #ifdef __cplusplus
 extern "C" {
 #endif
@@ -75,16 +81,10 @@ extern "C" {
  * object being acted on (i.e. the 'this' parameter).
  */
 
-#include <shlib-compat.h>
-#if !SHLIB_COMPAT (libc, GLIBC_2_0, GLIBC_2_1)
-  /* Setting this macro disables the use of the _vtable_offset bias in
-     _IO_JUMPS_FUNCS, below.  That is only needed if we want to
-     support old binaries (see oldfileops.c).  */
-# define _G_IO_NO_BACKWARD_COMPAT 1
-#endif
-
-#if (!defined _IO_USE_OLD_IO_FILE \
-     && (!defined _G_IO_NO_BACKWARD_COMPAT || _G_IO_NO_BACKWARD_COMPAT == 0))
+/* Setting this macro to 1 enables the use of the _vtable_offset bias
+   in _IO_JUMPS_FUNCS, below.  This is only needed for new-format
+   _IO_FILE in libc that must support old binaries (see oldfileops.c).  */
+#if SHLIB_COMPAT (libc, GLIBC_2_0, GLIBC_2_1) && !defined _IO_USE_OLD_IO_FILE
 # define _IO_JUMPS_OFFSET 1
 #else
 # define _IO_JUMPS_OFFSET 0
diff --git a/sysdeps/generic/_G_config.h b/sysdeps/generic/_G_config.h
new file mode 100644
index 0000000..7c917bf
--- /dev/null
+++ b/sysdeps/generic/_G_config.h
@@ -0,0 +1,15 @@
+/* Configuration parameters for stdio - generic version.  */
+
+#ifndef __G_CONFIG_H
+#define __G_CONFIG_H 1
+
+/* Define to 1 if the operating system supports mmap, 0 otherwise.
+   This function is required by POSIX but might still be unavailable,
+   for instance when the hardware lacks support for virtual memory.  */
+#define _G_HAVE_MMAP 1
+
+/* Define to 1 if the operating system supports mremap, 0 otherwise.
+   This function is currently a Linux-specific extension.  */
+#define _G_HAVE_MREMAP 0
+
+#endif	/* _G_config.h */
diff --git a/sysdeps/ieee754/ldbl-opt/nldbl-compat.h b/sysdeps/ieee754/ldbl-opt/nldbl-compat.h
index 3b3ef73..d61fbb2 100644
--- a/sysdeps/ieee754/ldbl-opt/nldbl-compat.h
+++ b/sysdeps/ieee754/ldbl-opt/nldbl-compat.h
@@ -82,22 +82,23 @@ extern ssize_t __nldbl___vstrfmon (char *, size_t, const char *, va_list)
 /* These don't use __typeof because they were not declared by the headers,
    since we don't compile with _FORTIFY_SOURCE.  */
 extern int __nldbl___vfprintf_chk (FILE *__restrict, int,
-				   const char *__restrict, _G_va_list);
+				   const char *__restrict, __gnuc_va_list);
 extern int __nldbl___vfwprintf_chk (FILE *__restrict, int,
 				    const wchar_t *__restrict, __gnuc_va_list);
 extern int __nldbl___vsprintf_chk (char *__restrict, int, size_t,
-				   const char *__restrict, _G_va_list) __THROW;
+				   const char *__restrict, __gnuc_va_list)
+  __THROW;
 extern int __nldbl___vsnprintf_chk (char *__restrict, size_t, int, size_t,
-				    const char *__restrict, _G_va_list)
+				    const char *__restrict, __gnuc_va_list)
   __THROW;
 extern int __nldbl___vswprintf_chk (wchar_t *__restrict, size_t, int, size_t,
 				    const wchar_t *__restrict, __gnuc_va_list)
   __THROW;
-extern int __nldbl___vasprintf_chk (char **, int, const char *, _G_va_list)
+extern int __nldbl___vasprintf_chk (char **, int, const char *, __gnuc_va_list)
   __THROW;
-extern int __nldbl___vdprintf_chk (int, int, const char *, _G_va_list);
+extern int __nldbl___vdprintf_chk (int, int, const char *, __gnuc_va_list);
 extern int __nldbl___obstack_vprintf_chk (struct obstack *, int, const char *,
-					  _G_va_list) __THROW;
+					  __gnuc_va_list) __THROW;
 extern void __nldbl___vsyslog_chk (int, int, const char *, va_list);
 
 
diff --git a/sysdeps/unix/sysv/linux/_G_config.h b/sysdeps/unix/sysv/linux/_G_config.h
new file mode 100644
index 0000000..0413716
--- /dev/null
+++ b/sysdeps/unix/sysv/linux/_G_config.h
@@ -0,0 +1,15 @@
+/* Configuration parameters for stdio - Linux version.  */
+
+#ifndef __G_CONFIG_H
+#define __G_CONFIG_H 1
+
+/* Define to 1 if the operating system supports mmap, 0 otherwise.
+   This function is required by POSIX but might still be unavailable,
+   for instance when the hardware lacks support for virtual memory.  */
+#define _G_HAVE_MMAP 1
+
+/* Define to 1 if the operating system supports mremap, 0 otherwise.
+   This function is currently a Linux-specific extension.  */
+#define _G_HAVE_MREMAP 1
+
+#endif	/* bits/_G_config.h */
diff --git a/sysdeps/unix/sysv/linux/bits/_G_config.h b/sysdeps/unix/sysv/linux/bits/_G_config.h
deleted file mode 100644
index 05a64ac..0000000
--- a/sysdeps/unix/sysv/linux/bits/_G_config.h
+++ /dev/null
@@ -1,55 +0,0 @@
-/* This file is needed by libio to define various configuration parameters.
-   These are always the same in the GNU C library.  */
-
-#ifndef _BITS_G_CONFIG_H
-#define _BITS_G_CONFIG_H 1
-
-/* Define types for libio in terms of the standard internal type names.  */
-
-#include <bits/types.h>
-#define __need_size_t
-#if defined _LIBC || defined _GLIBCPP_USE_WCHAR_T
-# define __need_wchar_t
-#endif
-#define __need_NULL
-#include <stddef.h>
-
-#include <bits/types/__mbstate_t.h>
-#include <bits/types/__fpos_t.h>
-#include <bits/types/__fpos64_t.h>
-
-#define _G_fpos_t __fpos_t
-#define _G_fpos64_t __fpos64_t
-
-#if defined _LIBC || defined _GLIBCPP_USE_WCHAR_T
-# include <bits/types/wint_t.h>
-#endif
-
-#if defined _LIBC || defined _GLIBCPP_USE_WCHAR_T
-# include <gconv.h>
-typedef union
-{
-  struct __gconv_info __cd;
-  struct
-  {
-    struct __gconv_info __cd;
-    struct __gconv_step_data __data;
-  } __combined;
-} _G_iconv_t;
-#endif
-
-
-/* These library features are always available in the GNU C library.  */
-#define _G_va_list __gnuc_va_list
-
-#define _G_HAVE_MMAP 1
-#define _G_HAVE_MREMAP 1
-
-#define _G_IO_IO_FILE_VERSION 0x20001
-
-/* This is defined by <bits/stat.h> if `st_blksize' exists.  */
-#define _G_HAVE_ST_BLKSIZE defined (_STATBUF_ST_BLKSIZE)
-
-#define _G_BUFSIZ 8192
-
-#endif	/* bits/_G_config.h */

http://sourceware.org/git/gitweb.cgi?p=glibc.git;a=commitdiff;h=6c6c962a202299b55d180e04f44a63ffb748096c

commit 6c6c962a202299b55d180e04f44a63ffb748096c
Author: Zack Weinberg <zackw@panix.com>
Date:   Mon Feb 5 13:09:15 2018 -0500

    Post-cleanup 1: move libio.h back out of bits/.
    
    We can't go very far with libio cleanups as long as we still have
    _IO_MTSAFE_IO, and I am not tackling that in this patch series,
    but we can at least make the maze of stdio-related headers a
    little less complicated.
    
    In this patch, libio.h moves back out of bits/ into the top level of
    the libio subdirectory, and is merged with libio/bits/libio-ldbl.h
    (which also used to be installed) and include/libio.h.  Since almost
    no files include libio.h directly, this is quite straightforward.
    
    libio.h is now always used with _LIBC defined, so all of the _LIBC ||
    _GLIBCPP_USE_WCHAR_T conditionals are unnecessary.  Similarly, the
    ifdef nest surrounding the definition of _IO_fwide_maybe_incompatible
    can collapse down to a single SHLIB_COMPAT check.  I also took the
    opportunity to add some checks for configuration botches to libio.h.
    
    Installed stripped libraries are unchanged by this patch.
    
            * libio/bits/libio.h: Move back to libio/libio.h and adjust
            multiple-include guard to match.
            Merge contents of libio/bits/libio-ldbl.h and include/libio.h
            into this file.
            Remove preprocessor conditionals that are always true and/or
            redundant to other preprocessor conditionals in the same nest.
            Include shlib-compat.h unconditionally.
            Error out if _LIBC is not defined, or if _ISOMAC is defined,
            or if _IO_MTSAFE_IO is defined but _IO_lock_t_defined is not
            defined after including stdio.h.
            Use __BEGIN_DECLS/__END_DECLS.
    
            * libio/bits/libio-ldbl.h, include/bits/libio.h: Delete file.
            * include/stdio.h, libio/iolibio.h, libio/libioP.h: Include
            libio.h as <libio/libio.h> rather than as <bits/libio.h>.

diff --git a/ChangeLog b/ChangeLog
index d80e9c3..1f661e1 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,5 +1,23 @@
 2018-02-07  Zack Weinberg  <zackw@panix.com>
 
+	* libio/bits/libio.h: Move back to libio/libio.h and adjust
+	multiple-include guard to match.
+	Merge contents of libio/bits/libio-ldbl.h and include/libio.h
+	into this file.
+	Remove preprocessor conditionals that are always true and/or
+	redundant to other preprocessor conditionals in the same nest.
+	Include shlib-compat.h unconditionally.
+	Error out if _LIBC is not defined, or if _ISOMAC is defined,
+	or if _IO_MTSAFE_IO is defined but _IO_lock_t_defined is not
+	defined after including stdio.h.
+	Use __BEGIN_DECLS/__END_DECLS.
+
+	* libio/bits/libio-ldbl.h, include/bits/libio.h: Delete file.
+	* include/stdio.h, libio/iolibio.h, libio/libioP.h: Include
+	libio.h as <libio/libio.h> rather than as <bits/libio.h>.
+
+2018-02-07  Zack Weinberg  <zackw@panix.com>
+
 	* 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
@@ -22,14 +40,14 @@
 	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
+	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,
+	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;
@@ -49,19 +67,18 @@
 	* 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/__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.
+	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.
+	* 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.
-
+	libio.h and _G_config.h.
 
 2018-02-07  Joseph Myers  <joseph@codesourcery.com>
 
diff --git a/include/bits/libio.h b/include/bits/libio.h
deleted file mode 100644
index 572395d..0000000
--- a/include/bits/libio.h
+++ /dev/null
@@ -1,45 +0,0 @@
-#if !defined _ISOMAC && defined _IO_MTSAFE_IO
-# include <stdio-lock.h>
-#endif
-#include <libio/bits/libio.h>
-
-#ifndef _ISOMAC
-#ifndef _LIBC_LIBIO_H
-#define _LIBC_LIBIO_H
-
-libc_hidden_proto (__overflow)
-libc_hidden_proto (__underflow)
-libc_hidden_proto (__uflow)
-libc_hidden_proto (__woverflow)
-libc_hidden_proto (__wunderflow)
-libc_hidden_proto (__wuflow)
-libc_hidden_proto (_IO_free_backup_area)
-libc_hidden_proto (_IO_free_wbackup_area)
-libc_hidden_proto (_IO_padn)
-libc_hidden_proto (_IO_putc)
-libc_hidden_proto (_IO_sgetn)
-libc_hidden_proto (_IO_vfprintf)
-libc_hidden_proto (_IO_vfscanf)
-
-#ifdef _IO_MTSAFE_IO
-# undef _IO_peekc
-# undef _IO_flockfile
-# undef _IO_funlockfile
-# undef _IO_ftrylockfile
-
-# define _IO_peekc(_fp) _IO_peekc_locked (_fp)
-# if _IO_lock_inexpensive
-#  define _IO_flockfile(_fp) \
-  if (((_fp)->_flags & _IO_USER_LOCK) == 0) _IO_lock_lock (*(_fp)->_lock)
-#  define _IO_funlockfile(_fp) \
-  if (((_fp)->_flags & _IO_USER_LOCK) == 0) _IO_lock_unlock (*(_fp)->_lock)
-# else
-#  define _IO_flockfile(_fp) \
-  if (((_fp)->_flags & _IO_USER_LOCK) == 0) _IO_flockfile (_fp)
-#  define _IO_funlockfile(_fp) \
-  if (((_fp)->_flags & _IO_USER_LOCK) == 0) _IO_funlockfile (_fp)
-# endif
-#endif /* _IO_MTSAFE_IO */
-
-#endif
-#endif
diff --git a/include/stdio.h b/include/stdio.h
index 3b6da17..f12b281 100644
--- a/include/stdio.h
+++ b/include/stdio.h
@@ -5,7 +5,7 @@
 # include <libio/stdio.h>
 # ifndef _ISOMAC
 #  define _LIBC_STDIO_H 1
-#  include <bits/libio.h>
+#  include <libio/libio.h>
 
 /* Now define the internal interfaces.  */
 
diff --git a/libio/bits/libio-ldbl.h b/libio/bits/libio-ldbl.h
deleted file mode 100644
index aa39353..0000000
--- a/libio/bits/libio-ldbl.h
+++ /dev/null
@@ -1,29 +0,0 @@
-/* -mlong-double-64 compatibility mode for libio functions.
-   Copyright (C) 2006-2018 Free Software Foundation, Inc.
-   This file is part of the GNU C Library.
-
-   The GNU C Library is free software; you can redistribute it and/or
-   modify it under the terms of the GNU Lesser General Public
-   License as published by the Free Software Foundation; either
-   version 2.1 of the License, or (at your option) any later version.
-
-   The GNU C Library is distributed in the hope that it will be useful,
-   but WITHOUT ANY WARRANTY; without even the implied warranty of
-   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-   Lesser General Public License for more details.
-
-   You should have received a copy of the GNU Lesser General Public
-   License along with the GNU C Library; if not, see
-   <http://www.gnu.org/licenses/>.  */
-
-#ifndef _BITS_LIBIO_LDBL_H
-#define _BITS_LIBIO_LDBL_H 1
-
-#ifndef _BITS_LIBIO_H
-# error "Never include <bits/libio-ldbl.h> directly; use <libio.h> instead."
-#endif
-
-__LDBL_REDIR_DECL (_IO_vfscanf)
-__LDBL_REDIR_DECL (_IO_vfprintf)
-
-#endif
diff --git a/libio/iolibio.h b/libio/iolibio.h
index 7814b1d..52731b6 100644
--- a/libio/iolibio.h
+++ b/libio/iolibio.h
@@ -2,7 +2,7 @@
 #define _IOLIBIO_H 1
 
 #include <stdio.h>
-#include <bits/libio.h>
+#include <libio/libio.h>
 
 /* These emulate stdio functionality, but with a different name
    (_IO_ungetc instead of ungetc), and using _IO_FILE instead of FILE. */
diff --git a/libio/bits/libio.h b/libio/libio.h
similarity index 87%
rename from libio/bits/libio.h
rename to libio/libio.h
index cefc2c8..ff67e18 100644
--- a/libio/bits/libio.h
+++ b/libio/libio.h
@@ -25,11 +25,22 @@
    This exception applies to code released by its copyright holders
    in files containing the exception.  */
 
-#ifndef _BITS_LIBIO_H
-#define _BITS_LIBIO_H 1
+#ifndef _LIBIO_H
+#define _LIBIO_H 1
+
+#ifndef _LIBC
+# error "libio.h should only be included when building glibc itself"
+#endif
+#ifdef _ISOMAC
+# error "libio.h should not be included under _ISOMAC"
+#endif
 
 #include <stdio.h>
 
+#if defined _IO_MTSAFE_IO && !defined _IO_lock_t_defined
+# error "Someone forgot to include stdio-lock.h"
+#endif
+
 #include <bits/_G_config.h>
 /* ALL of these should be defined in _G_config.h */
 #define _IO_fpos_t __fpos_t
@@ -46,6 +57,10 @@
 #define _IO_wint_t wint_t
 #define _IO_va_list __gnuc_va_list
 
+#include <shlib-compat.h>
+
+__BEGIN_DECLS
+
 /* compatibility defines */
 #define _STDIO_USES_IOSTREAM
 #define _IO_UNIFIED_JUMPTABLES 1
@@ -143,7 +158,6 @@ enum __codecvt_result
   __codecvt_noconv
 };
 
-#if defined _LIBC || defined _GLIBCPP_USE_WCHAR_T
 /* The order of the elements in the following struct must match the order
    of the virtual functions in the libstdc++ codecvt class.  */
 struct _IO_codecvt
@@ -198,7 +212,6 @@ struct _IO_wide_data
 
   const struct _IO_jump_t *_wide_vtable;
 };
-#endif
 
 
 #ifndef __cplusplus
@@ -236,17 +249,10 @@ extern void _IO_cookie_init (struct _IO_cookie_file *__cfile, int __read_write,
 			     void *__cookie, _IO_cookie_io_functions_t __fns);
 #endif
 
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
 extern int __underflow (_IO_FILE *);
-#if defined _LIBC || defined _GLIBCPP_USE_WCHAR_T
 extern _IO_wint_t __wunderflow (_IO_FILE *);
 extern _IO_wint_t __wuflow (_IO_FILE *);
 extern _IO_wint_t __woverflow (_IO_FILE *, _IO_wint_t);
-#endif
 
 #if  __GNUC__ >= 3
 # define _IO_BE(expr, res) __builtin_expect ((expr), res)
@@ -261,7 +267,6 @@ extern _IO_wint_t __woverflow (_IO_FILE *, _IO_wint_t);
 	: *(unsigned char *) (_fp)->_IO_read_ptr)
 #define _IO_putc_unlocked(_ch, _fp) __putc_unlocked_body (_ch, _fp)
 
-#if defined _LIBC || defined _GLIBCPP_USE_WCHAR_T
 # define _IO_getwc_unlocked(_fp) \
   (_IO_BE ((_fp)->_wide_data == NULL					\
 	   || ((_fp)->_wide_data->_IO_read_ptr				\
@@ -273,7 +278,6 @@ extern _IO_wint_t __woverflow (_IO_FILE *, _IO_wint_t);
 	       >= (_fp)->_wide_data->_IO_write_end), 0)			\
    ? __woverflow (_fp, _wch)						\
    : (_IO_wint_t) (*(_fp)->_wide_data->_IO_write_ptr++ = (_wch)))
-#endif
 
 #define _IO_feof_unlocked(_fp) __feof_unlocked_body (_fp)
 #define _IO_ferror_unlocked(_fp) __ferror_unlocked_body (_fp)
@@ -319,28 +323,25 @@ extern _IO_off64_t _IO_seekpos (_IO_FILE *, _IO_off64_t, int);
 
 extern void _IO_free_backup_area (_IO_FILE *) __THROW;
 
-#if defined _LIBC || defined _GLIBCPP_USE_WCHAR_T
+
 extern _IO_wint_t _IO_getwc (_IO_FILE *__fp);
 extern _IO_wint_t _IO_putwc (wchar_t __wc, _IO_FILE *__fp);
 extern int _IO_fwide (_IO_FILE *__fp, int __mode) __THROW;
-# if __GNUC__ >= 2
+
 /* While compiling glibc we have to handle compatibility with very old
    versions.  */
-#  if defined _LIBC && defined SHARED
-#   include <shlib-compat.h>
-#   if SHLIB_COMPAT (libc, GLIBC_2_0, GLIBC_2_1)
-#    define _IO_fwide_maybe_incompatible \
+#if SHLIB_COMPAT (libc, GLIBC_2_0, GLIBC_2_1)
+#  define _IO_fwide_maybe_incompatible \
   (__builtin_expect (&_IO_stdin_used == NULL, 0))
 extern const int _IO_stdin_used;
 weak_extern (_IO_stdin_used);
-#   endif
-#  endif
-#  ifndef _IO_fwide_maybe_incompatible
-#   define _IO_fwide_maybe_incompatible (0)
-#  endif
+#else
+# define _IO_fwide_maybe_incompatible (0)
+#endif
+
 /* A special optimized version of the function above.  It optimizes the
    case of initializing an unoriented byte stream.  */
-#  define _IO_fwide(__fp, __mode) \
+#define _IO_fwide(__fp, __mode) \
   ({ int __result = (__mode);						      \
      if (__result < 0 && ! _IO_fwide_maybe_incompatible)		      \
        {								      \
@@ -354,7 +355,6 @@ weak_extern (_IO_stdin_used);
      else								      \
        __result = _IO_fwide (__fp, __result);				      \
      __result; })
-# endif
 
 extern int _IO_vfwscanf (_IO_FILE * __restrict, const wchar_t * __restrict,
 			 _IO_va_list, int *__restrict);
@@ -362,14 +362,46 @@ extern int _IO_vfwprintf (_IO_FILE *__restrict, const wchar_t *__restrict,
 			  _IO_va_list);
 extern _IO_ssize_t _IO_wpadn (_IO_FILE *, wint_t, _IO_ssize_t);
 extern void _IO_free_wbackup_area (_IO_FILE *) __THROW;
-#endif
 
 #ifdef __LDBL_COMPAT
-# include <bits/libio-ldbl.h>
+__LDBL_REDIR_DECL (_IO_vfscanf)
+__LDBL_REDIR_DECL (_IO_vfprintf)
 #endif
 
-#ifdef __cplusplus
-}
-#endif
+libc_hidden_proto (__overflow)
+libc_hidden_proto (__underflow)
+libc_hidden_proto (__uflow)
+libc_hidden_proto (__woverflow)
+libc_hidden_proto (__wunderflow)
+libc_hidden_proto (__wuflow)
+libc_hidden_proto (_IO_free_backup_area)
+libc_hidden_proto (_IO_free_wbackup_area)
+libc_hidden_proto (_IO_padn)
+libc_hidden_proto (_IO_putc)
+libc_hidden_proto (_IO_sgetn)
+libc_hidden_proto (_IO_vfprintf)
+libc_hidden_proto (_IO_vfscanf)
+
+#ifdef _IO_MTSAFE_IO
+# undef _IO_peekc
+# undef _IO_flockfile
+# undef _IO_funlockfile
+# undef _IO_ftrylockfile
+
+# define _IO_peekc(_fp) _IO_peekc_locked (_fp)
+# if _IO_lock_inexpensive
+#  define _IO_flockfile(_fp) \
+  if (((_fp)->_flags & _IO_USER_LOCK) == 0) _IO_lock_lock (*(_fp)->_lock)
+#  define _IO_funlockfile(_fp) \
+  if (((_fp)->_flags & _IO_USER_LOCK) == 0) _IO_lock_unlock (*(_fp)->_lock)
+# else
+#  define _IO_flockfile(_fp) \
+  if (((_fp)->_flags & _IO_USER_LOCK) == 0) _IO_flockfile (_fp)
+#  define _IO_funlockfile(_fp) \
+  if (((_fp)->_flags & _IO_USER_LOCK) == 0) _IO_funlockfile (_fp)
+# endif
+#endif /* _IO_MTSAFE_IO */
+
+__END_DECLS
 
-#endif /* _BITS_LIBIO_H */
+#endif /* _LIBIO_H */
diff --git a/libio/libioP.h b/libio/libioP.h
index ac66f95..8edc207 100644
--- a/libio/libioP.h
+++ b/libio/libioP.h
@@ -43,7 +43,7 @@
 #include <math_ldbl_opt.h>
 
 #include <stdio.h>
-#include <bits/libio.h>
+#include <libio/libio.h>
 #include "iolibio.h"
 
 #ifdef __cplusplus

http://sourceware.org/git/gitweb.cgi?p=glibc.git;a=commitdiff;h=a4fea3f2c3253b9ae6ffacd3747034ccbe56bc60

commit a4fea3f2c3253b9ae6ffacd3747034ccbe56bc60
Author: Zack Weinberg <zackw@panix.com>
Date:   Fri Feb 2 19:36:42 2018 -0500

    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.

diff --git a/ChangeLog b/ChangeLog
index 66fda89..d80e9c3 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,68 @@
+2018-02-07  Zack Weinberg  <zackw@panix.com>
+
+	* 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  Joseph Myers  <joseph@codesourcery.com>
 
 	[BZ #15105]
diff --git a/NEWS b/NEWS
index 3629944..06c9251 100644
--- a/NEWS
+++ b/NEWS
@@ -13,6 +13,10 @@ Major new features:
 
 Deprecated and removed features, and other changes affecting compatibility:
 
+ * The nonstandard header files <libio.h> and <_G_config.h> are no longer
+   installed.  Software that was using either header should be updated to
+   use standard <stdio.h> interfaces instead.
+
  * The stdio.h functions 'getc' and 'putc' are no longer defined as macros.
    This was never required by the C standard, and the macros just expanded
    to call alternative names for the same functions.  If you hoped getc and
diff --git a/bits/_G_config.h b/bits/_G_config.h
index 2b60d29..8c81bc4 100644
--- a/bits/_G_config.h
+++ b/bits/_G_config.h
@@ -4,10 +4,6 @@
 #ifndef _BITS_G_CONFIG_H
 #define _BITS_G_CONFIG_H 1
 
-#if !defined _BITS_LIBIO_H && !defined _G_CONFIG_H
-# error "Never include <bits/_G_config.h> directly; use <stdio.h> instead."
-#endif
-
 /* Define types for libio in terms of the standard internal type names.  */
 
 #include <bits/types.h>
@@ -19,20 +15,16 @@
 #include <stddef.h>
 
 #include <bits/types/__mbstate_t.h>
+#include <bits/types/__fpos_t.h>
+#include <bits/types/__fpos64_t.h>
+
+#define _G_fpos_t __fpos_t
+#define _G_fpos64_t __fpos64_t
+
 #if defined _LIBC || defined _GLIBCPP_USE_WCHAR_T
 # include <bits/types/wint_t.h>
 #endif
 
-typedef struct
-{
-  __off_t __pos;
-  __mbstate_t __state;
-} _G_fpos_t;
-typedef struct
-{
-  __off64_t __pos;
-  __mbstate_t __state;
-} _G_fpos64_t;
 #if defined _LIBC || defined _GLIBCPP_USE_WCHAR_T
 # include <gconv.h>
 typedef union
diff --git a/conform/data/stdio.h-data b/conform/data/stdio.h-data
index f69802c..3ef2460 100644
--- a/conform/data/stdio.h-data
+++ b/conform/data/stdio.h-data
@@ -41,7 +41,7 @@ type fpos_t
 #if !defined ISO && !defined ISO99 && !defined ISO11 && !defined POSIX
 type va_list
 #else
-#define va_list _G_va_list
+#define va_list __gnuc_va_list
 #endif
 type size_t
 #if defined XOPEN2K8 || defined POSIX2008
diff --git a/include/bits/types/__fpos64_t.h b/include/bits/types/__fpos64_t.h
new file mode 100644
index 0000000..68cc4e8
--- /dev/null
+++ b/include/bits/types/__fpos64_t.h
@@ -0,0 +1 @@
+#include <libio/bits/types/__fpos64_t.h>
diff --git a/include/bits/types/__fpos_t.h b/include/bits/types/__fpos_t.h
new file mode 100644
index 0000000..2dcdc98
--- /dev/null
+++ b/include/bits/types/__fpos_t.h
@@ -0,0 +1 @@
+#include <libio/bits/types/__fpos_t.h>
diff --git a/include/bits/types/cookie_io_functions_t.h b/include/bits/types/cookie_io_functions_t.h
new file mode 100644
index 0000000..87f7930
--- /dev/null
+++ b/include/bits/types/cookie_io_functions_t.h
@@ -0,0 +1 @@
+#include <libio/bits/types/cookie_io_functions_t.h>
diff --git a/include/bits/types/struct_FILE.h b/include/bits/types/struct_FILE.h
new file mode 100644
index 0000000..9714072
--- /dev/null
+++ b/include/bits/types/struct_FILE.h
@@ -0,0 +1 @@
+#include <libio/bits/types/struct_FILE.h>
diff --git a/include/stdio.h b/include/stdio.h
index f1e987a..3b6da17 100644
--- a/include/stdio.h
+++ b/include/stdio.h
@@ -1,6 +1,11 @@
 #ifndef _STDIO_H
+# if !defined _ISOMAC && defined _IO_MTSAFE_IO
+#  include <stdio-lock.h>
+# endif
 # include <libio/stdio.h>
 # ifndef _ISOMAC
+#  define _LIBC_STDIO_H 1
+#  include <bits/libio.h>
 
 /* Now define the internal interfaces.  */
 
diff --git a/libio/Makefile b/libio/Makefile
index 918a86b..3e08ed0 100644
--- a/libio/Makefile
+++ b/libio/Makefile
@@ -22,10 +22,11 @@ subdir	:= libio
 
 include ../Makeconfig
 
-headers	:= stdio.h libio.h _G_config.h \
-	   bits/stdio.h bits/libio.h bits/_G_config.h \
-	   bits/sys_errlist.h bits/stdio2.h bits/stdio-ldbl.h bits/libio-ldbl.h \
-	   bits/types/FILE.h bits/types/__FILE.h
+headers	:= stdio.h \
+	   bits/stdio.h bits/stdio2.h bits/sys_errlist.h bits/stdio-ldbl.h \
+	   bits/types/FILE.h bits/types/__FILE.h bits/types/struct_FILE.h \
+	   bits/types/__fpos_t.h bits/types/__fpos64_t.h \
+	   bits/types/cookie_io_functions_t.h
 
 routines	:=							      \
 	filedoalloc iofclose iofdopen iofflush iofgetpos iofgets iofopen      \
diff --git a/libio/_G_config.h b/libio/_G_config.h
deleted file mode 100644
index 68de2fc..0000000
--- a/libio/_G_config.h
+++ /dev/null
@@ -1,25 +0,0 @@
-/* Copyright (C) 2017-2018 Free Software Foundation, Inc.
-   This file is part of the GNU C Library.
-
-   The GNU C Library is free software; you can redistribute it and/or
-   modify it under the terms of the GNU Lesser General Public
-   License as published by the Free Software Foundation; either
-   version 2.1 of the License, or (at your option) any later version.
-
-   The GNU C Library is distributed in the hope that it will be useful,
-   but WITHOUT ANY WARRANTY; without even the implied warranty of
-   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-   Lesser General Public License for more details.
-
-   You should have received a copy of the GNU Lesser General Public
-   License along with the GNU C Library; if not, see
-   <http://www.gnu.org/licenses/>.  */
-
-#ifndef _G_CONFIG_H
-#define _G_CONFIG_H 1
-
-#warning "<_G_config.h> is deprecated; use <stdio.h> instead."
-
-#include <bits/_G_config.h>
-
-#endif
diff --git a/libio/bits/libio.h b/libio/bits/libio.h
index fae5b93..cefc2c8 100644
--- a/libio/bits/libio.h
+++ b/libio/bits/libio.h
@@ -28,14 +28,12 @@
 #ifndef _BITS_LIBIO_H
 #define _BITS_LIBIO_H 1
 
-#if !defined _STDIO_H && !defined _LIBIO_H
-# error "Never include <bits/libio.h> directly; use <stdio.h> instead."
-#endif
+#include <stdio.h>
 
 #include <bits/_G_config.h>
 /* ALL of these should be defined in _G_config.h */
-#define _IO_fpos_t _G_fpos_t
-#define _IO_fpos64_t _G_fpos64_t
+#define _IO_fpos_t __fpos_t
+#define _IO_fpos64_t __fpos64_t
 #define _IO_size_t size_t
 #define _IO_ssize_t __ssize_t
 #define _IO_off_t __off_t
@@ -44,40 +42,17 @@
 #define _IO_uid_t __uid_t
 #define _IO_iconv_t _G_iconv_t
 #define _IO_HAVE_ST_BLKSIZE _G_HAVE_ST_BLKSIZE
-#define _IO_BUFSIZ _G_BUFSIZ
-#define _IO_va_list _G_va_list
+#define _IO_BUFSIZ BUFSIZ
 #define _IO_wint_t wint_t
+#define _IO_va_list __gnuc_va_list
 
-/* This define avoids name pollution if we're using GNU stdarg.h */
-#define __need___va_list
-#include <stdarg.h>
-#ifdef __GNUC_VA_LIST
-# undef _IO_va_list
-# define _IO_va_list __gnuc_va_list
-#endif /* __GNUC_VA_LIST */
-
-#ifndef __P
-# include <sys/cdefs.h>
-#endif /*!__P*/
-
+/* compatibility defines */
+#define _STDIO_USES_IOSTREAM
 #define _IO_UNIFIED_JUMPTABLES 1
+#define __HAVE_COLUMN
+#define _IO_file_flags _flags
 
-#ifndef EOF
-# define EOF (-1)
-#endif
-#ifndef NULL
-# if defined __GNUG__ && \
-    (__GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 8))
-#  define NULL (__null)
-# else
-#  if !defined(__cplusplus)
-#   define NULL ((void*)0)
-#  else
-#   define NULL (0)
-#  endif
-# endif
-#endif
-
+/* open modes */
 #define _IOS_INPUT	1
 #define _IOS_OUTPUT	2
 #define _IOS_ATEND	4
@@ -146,14 +121,7 @@
 #define _IO_BOOLALPHA 0200000
 
 
-struct _IO_jump_t;  struct _IO_FILE;
-
-/* During the build of glibc itself, _IO_lock_t will already have been
-   defined by internal headers.  */
-#ifndef _IO_lock_t_defined
-typedef void _IO_lock_t;
-#endif
-
+struct _IO_jump_t;
 
 /* A streammarker remembers a position in a buffer. */
 
@@ -164,16 +132,6 @@ struct _IO_marker {
  it points to _buf->Gbase()+_pos. FIXME comment */
   /* if _pos < 0, it points to _buf->eBptr()+_pos. FIXME comment */
   int _pos;
-#if 0
-    void set_streampos(streampos sp) { _spos = sp; }
-    void set_offset(int offset) { _pos = offset; _spos = (streampos)(-2); }
-  public:
-    streammarker(streambuf *sb);
-    ~streammarker();
-    int saving() { return  _spos == -2; }
-    int delta(streammarker&);
-    int delta();
-#endif
 };
 
 /* This is the structure from the libstdc++ codecvt class.  */
@@ -242,73 +200,6 @@ struct _IO_wide_data
 };
 #endif
 
-struct _IO_FILE {
-  int _flags;		/* High-order word is _IO_MAGIC; rest is flags. */
-#define _IO_file_flags _flags
-
-  /* The following pointers correspond to the C++ streambuf protocol. */
-  /* Note:  Tk uses the _IO_read_ptr and _IO_read_end fields directly. */
-  char* _IO_read_ptr;	/* Current read pointer */
-  char* _IO_read_end;	/* End of get area. */
-  char* _IO_read_base;	/* Start of putback+get area. */
-  char* _IO_write_base;	/* Start of put area. */
-  char* _IO_write_ptr;	/* Current put pointer. */
-  char* _IO_write_end;	/* End of put area. */
-  char* _IO_buf_base;	/* Start of reserve area. */
-  char* _IO_buf_end;	/* End of reserve area. */
-  /* The following fields are used to support backing up and undo. */
-  char *_IO_save_base; /* Pointer to start of non-current get area. */
-  char *_IO_backup_base;  /* Pointer to first valid character of backup area */
-  char *_IO_save_end; /* Pointer to end of non-current get area. */
-
-  struct _IO_marker *_markers;
-
-  struct _IO_FILE *_chain;
-
-  int _fileno;
-#if 0
-  int _blksize;
-#else
-  int _flags2;
-#endif
-  _IO_off_t _old_offset; /* This used to be _offset but it's too small.  */
-
-#define __HAVE_COLUMN /* temporary */
-  /* 1+column number of pbase(); 0 is unknown. */
-  unsigned short _cur_column;
-  signed char _vtable_offset;
-  char _shortbuf[1];
-
-  /*  char* _save_gptr;  char* _save_egptr; */
-
-  _IO_lock_t *_lock;
-#ifdef _IO_USE_OLD_IO_FILE
-};
-
-struct _IO_FILE_complete
-{
-  struct _IO_FILE _file;
-#endif
-#if defined _G_IO_IO_FILE_VERSION && _G_IO_IO_FILE_VERSION == 0x20001
-  _IO_off64_t _offset;
-# if defined _LIBC || defined _GLIBCPP_USE_WCHAR_T
-  /* Wide character stream stuff.  */
-  struct _IO_codecvt *_codecvt;
-  struct _IO_wide_data *_wide_data;
-  struct _IO_FILE *_freeres_list;
-  void *_freeres_buf;
-# else
-  void *__pad1;
-  void *__pad2;
-  void *__pad3;
-  void *__pad4;
-# endif
-  size_t __pad5;
-  int _mode;
-  /* Make sure we don't get into trouble again.  */
-  char _unused2[15 * sizeof (int) - 4 * sizeof (void *) - sizeof (size_t)];
-#endif
-};
 
 #ifndef __cplusplus
 typedef struct _IO_FILE _IO_FILE;
@@ -330,49 +221,13 @@ extern _IO_FILE *_IO_stderr attribute_hidden;
 #endif
 
 
-/* Functions to do I/O and file management for a stream.  */
-
-/* Read NBYTES bytes from COOKIE into a buffer pointed to by BUF.
-   Return number of bytes read.  */
-typedef __ssize_t __io_read_fn (void *__cookie, char *__buf, size_t __nbytes);
-
-/* Write N bytes pointed to by BUF to COOKIE.  Write all N bytes
-   unless there is an error.  Return number of bytes written.  If
-   there is an error, return 0 and do not write anything.  If the file
-   has been opened for append (__mode.__append set), then set the file
-   pointer to the end of the file and then do the write; if not, just
-   write at the current file pointer.  */
-typedef __ssize_t __io_write_fn (void *__cookie, const char *__buf,
-				 size_t __n);
-
-/* Move COOKIE's file position to *POS bytes from the
-   beginning of the file (if W is SEEK_SET),
-   the current position (if W is SEEK_CUR),
-   or the end of the file (if W is SEEK_END).
-   Set *POS to the new file position.
-   Returns zero if successful, nonzero if not.  */
-typedef int __io_seek_fn (void *__cookie, _IO_off64_t *__pos, int __w);
-
-/* Close COOKIE.  */
-typedef int __io_close_fn (void *__cookie);
-
-
+/* Compatibility names for cookie I/O functions.  */
 #ifdef __USE_GNU
-/* User-visible names for the above.  */
-typedef __io_read_fn cookie_read_function_t;
-typedef __io_write_fn cookie_write_function_t;
-typedef __io_seek_fn cookie_seek_function_t;
-typedef __io_close_fn cookie_close_function_t;
-
-/* The structure with the cookie function pointers.  */
-typedef struct
-{
-  __io_read_fn *read;		/* Read bytes.  */
-  __io_write_fn *write;		/* Write bytes.  */
-  __io_seek_fn *seek;		/* Seek/tell file position.  */
-  __io_close_fn *close;		/* Close file.  */
-} _IO_cookie_io_functions_t;
-typedef _IO_cookie_io_functions_t cookie_io_functions_t;
+typedef cookie_read_function_t __io_read_fn;
+typedef cookie_write_function_t __io_write_fn;
+typedef cookie_seek_function_t __io_seek_fn;
+typedef cookie_close_function_t __io_close_fn;
+typedef cookie_io_functions_t _IO_cookie_io_functions_t;
 
 struct _IO_cookie_file;
 
@@ -387,8 +242,6 @@ extern "C" {
 #endif
 
 extern int __underflow (_IO_FILE *);
-extern int __uflow (_IO_FILE *);
-extern int __overflow (_IO_FILE *, int);
 #if defined _LIBC || defined _GLIBCPP_USE_WCHAR_T
 extern _IO_wint_t __wunderflow (_IO_FILE *);
 extern _IO_wint_t __wuflow (_IO_FILE *);
@@ -401,17 +254,12 @@ extern _IO_wint_t __woverflow (_IO_FILE *, _IO_wint_t);
 # define _IO_BE(expr, res) (expr)
 #endif
 
-#define _IO_getc_unlocked(_fp) \
-       (_IO_BE ((_fp)->_IO_read_ptr >= (_fp)->_IO_read_end, 0) \
-	? __uflow (_fp) : *(unsigned char *) (_fp)->_IO_read_ptr++)
+#define _IO_getc_unlocked(_fp) __getc_unlocked_body (_fp)
 #define _IO_peekc_unlocked(_fp) \
        (_IO_BE ((_fp)->_IO_read_ptr >= (_fp)->_IO_read_end, 0) \
 	  && __underflow (_fp) == EOF ? EOF \
 	: *(unsigned char *) (_fp)->_IO_read_ptr)
-#define _IO_putc_unlocked(_ch, _fp) \
-   (_IO_BE ((_fp)->_IO_write_ptr >= (_fp)->_IO_write_end, 0) \
-    ? __overflow (_fp, (unsigned char) (_ch)) \
-    : (unsigned char) (*(_fp)->_IO_write_ptr++ = (_ch)))
+#define _IO_putc_unlocked(_ch, _fp) __putc_unlocked_body (_ch, _fp)
 
 #if defined _LIBC || defined _GLIBCPP_USE_WCHAR_T
 # define _IO_getwc_unlocked(_fp) \
@@ -427,8 +275,8 @@ extern _IO_wint_t __woverflow (_IO_FILE *, _IO_wint_t);
    : (_IO_wint_t) (*(_fp)->_wide_data->_IO_write_ptr++ = (_wch)))
 #endif
 
-#define _IO_feof_unlocked(__fp) (((__fp)->_flags & _IO_EOF_SEEN) != 0)
-#define _IO_ferror_unlocked(__fp) (((__fp)->_flags & _IO_ERR_SEEN) != 0)
+#define _IO_feof_unlocked(_fp) __feof_unlocked_body (_fp)
+#define _IO_ferror_unlocked(_fp) __ferror_unlocked_body (_fp)
 
 extern int _IO_getc (_IO_FILE *__fp);
 extern int _IO_putc (int __c, _IO_FILE *__fp);
diff --git a/libio/bits/stdio.h b/libio/bits/stdio.h
index eb42b22..4ab9190 100644
--- a/libio/bits/stdio.h
+++ b/libio/bits/stdio.h
@@ -16,6 +16,9 @@
    License along with the GNU C Library; if not, see
    <http://www.gnu.org/licenses/>.  */
 
+#ifndef _BITS_STDIO_H
+#define _BITS_STDIO_H 1
+
 #ifndef _STDIO_H
 # error "Never include <bits/stdio.h> directly; use <stdio.h> instead."
 #endif
@@ -33,7 +36,7 @@
 # if !(__USE_FORTIFY_LEVEL > 0 && defined __fortify_function)
 /* Write formatted output to stdout from argument list ARG.  */
 __STDIO_INLINE int
-vprintf (const char *__restrict __fmt, _G_va_list __arg)
+vprintf (const char *__restrict __fmt, __gnuc_va_list __arg)
 {
   return vfprintf (stdout, __fmt, __arg);
 }
@@ -52,7 +55,7 @@ getchar (void)
 __STDIO_INLINE int
 fgetc_unlocked (FILE *__fp)
 {
-  return _IO_getc_unlocked (__fp);
+  return __getc_unlocked_body (__fp);
 }
 # endif /* misc */
 
@@ -62,14 +65,14 @@ fgetc_unlocked (FILE *__fp)
 __STDIO_INLINE int
 getc_unlocked (FILE *__fp)
 {
-  return _IO_getc_unlocked (__fp);
+  return __getc_unlocked_body (__fp);
 }
 
 /* This is defined in POSIX.1:1996.  */
 __STDIO_INLINE int
 getchar_unlocked (void)
 {
-  return _IO_getc_unlocked (stdin);
+  return __getc_unlocked_body (stdin);
 }
 # endif	/* POSIX */
 
@@ -87,7 +90,7 @@ putchar (int __c)
 __STDIO_INLINE int
 fputc_unlocked (int __c, FILE *__stream)
 {
-  return _IO_putc_unlocked (__c, __stream);
+  return __putc_unlocked_body (__c, __stream);
 }
 # endif /* misc */
 
@@ -97,21 +100,21 @@ fputc_unlocked (int __c, FILE *__stream)
 __STDIO_INLINE int
 putc_unlocked (int __c, FILE *__stream)
 {
-  return _IO_putc_unlocked (__c, __stream);
+  return __putc_unlocked_body (__c, __stream);
 }
 
 /* This is defined in POSIX.1:1996.  */
 __STDIO_INLINE int
 putchar_unlocked (int __c)
 {
-  return _IO_putc_unlocked (__c, stdout);
+  return __putc_unlocked_body (__c, stdout);
 }
 # endif	/* POSIX */
 
 
 # ifdef	__USE_GNU
 /* Like `getdelim', but reads up to a newline.  */
-__STDIO_INLINE _IO_ssize_t
+__STDIO_INLINE __ssize_t
 getline (char **__lineptr, size_t *__n, FILE *__stream)
 {
   return __getdelim (__lineptr, __n, '\n', __stream);
@@ -124,14 +127,14 @@ getline (char **__lineptr, size_t *__n, FILE *__stream)
 __STDIO_INLINE int
 __NTH (feof_unlocked (FILE *__stream))
 {
-  return _IO_feof_unlocked (__stream);
+  return __feof_unlocked_body (__stream);
 }
 
 /* Faster versions when locking is not required.  */
 __STDIO_INLINE int
 __NTH (ferror_unlocked (FILE *__stream))
 {
-  return _IO_ferror_unlocked (__stream);
+  return __ferror_unlocked_body (__stream);
 }
 # endif /* misc */
 
@@ -151,7 +154,7 @@ __NTH (ferror_unlocked (FILE *__stream))
 		       for (__cnt = (size_t) (size) * (size_t) (n);	      \
 			    __cnt > 0; --__cnt)				      \
 			 {						      \
-			   int __c = _IO_getc_unlocked (__stream);	      \
+			   int __c = getc_unlocked (__stream);		      \
 			   if (__c == EOF)				      \
 			     break;					      \
 			   *__ptr++ = __c;				      \
@@ -174,7 +177,7 @@ __NTH (ferror_unlocked (FILE *__stream))
 		       size_t __cnt;					      \
 		       for (__cnt = (size_t) (size) * (size_t) (n);	      \
 			    __cnt > 0; --__cnt)				      \
-			 if (_IO_putc_unlocked (*__ptr++, __stream) == EOF)   \
+			 if (putc_unlocked (*__ptr++, __stream) == EOF)	      \
 			   break;					      \
 		       ((size_t) (size) * (size_t) (n) - __cnt)		      \
 			/ (size_t) (size); })				      \
@@ -188,3 +191,5 @@ __NTH (ferror_unlocked (FILE *__stream))
 
 /* Define helper macro.  */
 #undef __STDIO_INLINE
+
+#endif /* bits/stdio.h.  */
diff --git a/libio/bits/stdio2.h b/libio/bits/stdio2.h
index 55302e9..1165150 100644
--- a/libio/bits/stdio2.h
+++ b/libio/bits/stdio2.h
@@ -16,6 +16,9 @@
    License along with the GNU C Library; if not, see
    <http://www.gnu.org/licenses/>.  */
 
+#ifndef _BITS_STDIO2_H
+#define _BITS_STDIO2_H 1
+
 #ifndef _STDIO_H
 # error "Never include <bits/stdio2.h> directly; use <stdio.h> instead."
 #endif
@@ -24,7 +27,7 @@ extern int __sprintf_chk (char *__restrict __s, int __flag, size_t __slen,
 			  const char *__restrict __format, ...) __THROW;
 extern int __vsprintf_chk (char *__restrict __s, int __flag, size_t __slen,
 			   const char *__restrict __format,
-			   _G_va_list __ap) __THROW;
+			   __gnuc_va_list __ap) __THROW;
 
 #ifdef __va_arg_pack
 __fortify_function int
@@ -41,7 +44,7 @@ __NTH (sprintf (char *__restrict __s, const char *__restrict __fmt, ...))
 
 __fortify_function int
 __NTH (vsprintf (char *__restrict __s, const char *__restrict __fmt,
-		 _G_va_list __ap))
+		 __gnuc_va_list __ap))
 {
   return __builtin___vsprintf_chk (__s, __USE_FORTIFY_LEVEL - 1,
 				   __bos (__s), __fmt, __ap);
@@ -54,7 +57,7 @@ extern int __snprintf_chk (char *__restrict __s, size_t __n, int __flag,
 			   ...) __THROW;
 extern int __vsnprintf_chk (char *__restrict __s, size_t __n, int __flag,
 			    size_t __slen, const char *__restrict __format,
-			    _G_va_list __ap) __THROW;
+			    __gnuc_va_list __ap) __THROW;
 
 # ifdef __va_arg_pack
 __fortify_function int
@@ -72,7 +75,7 @@ __NTH (snprintf (char *__restrict __s, size_t __n,
 
 __fortify_function int
 __NTH (vsnprintf (char *__restrict __s, size_t __n,
-		  const char *__restrict __fmt, _G_va_list __ap))
+		  const char *__restrict __fmt, __gnuc_va_list __ap))
 {
   return __builtin___vsnprintf_chk (__s, __n, __USE_FORTIFY_LEVEL - 1,
 				    __bos (__s), __fmt, __ap);
@@ -86,9 +89,9 @@ extern int __fprintf_chk (FILE *__restrict __stream, int __flag,
 			  const char *__restrict __format, ...);
 extern int __printf_chk (int __flag, const char *__restrict __format, ...);
 extern int __vfprintf_chk (FILE *__restrict __stream, int __flag,
-			   const char *__restrict __format, _G_va_list __ap);
+			   const char *__restrict __format, __gnuc_va_list __ap);
 extern int __vprintf_chk (int __flag, const char *__restrict __format,
-			  _G_va_list __ap);
+			  __gnuc_va_list __ap);
 
 # ifdef __va_arg_pack
 __fortify_function int
@@ -111,7 +114,7 @@ printf (const char *__restrict __fmt, ...)
 # endif
 
 __fortify_function int
-vprintf (const char *__restrict __fmt, _G_va_list __ap)
+vprintf (const char *__restrict __fmt, __gnuc_va_list __ap)
 {
 #ifdef __USE_EXTERN_INLINES
   return __vfprintf_chk (stdout, __USE_FORTIFY_LEVEL - 1, __fmt, __ap);
@@ -122,7 +125,7 @@ vprintf (const char *__restrict __fmt, _G_va_list __ap)
 
 __fortify_function int
 vfprintf (FILE *__restrict __stream,
-	  const char *__restrict __fmt, _G_va_list __ap)
+	  const char *__restrict __fmt, __gnuc_va_list __ap)
 {
   return __vfprintf_chk (__stream, __USE_FORTIFY_LEVEL - 1, __fmt, __ap);
 }
@@ -131,7 +134,7 @@ vfprintf (FILE *__restrict __stream,
 extern int __dprintf_chk (int __fd, int __flag, const char *__restrict __fmt,
 			  ...) __attribute__ ((__format__ (__printf__, 3, 4)));
 extern int __vdprintf_chk (int __fd, int __flag,
-			   const char *__restrict __fmt, _G_va_list __arg)
+			   const char *__restrict __fmt, __gnuc_va_list __arg)
      __attribute__ ((__format__ (__printf__, 3, 0)));
 
 #  ifdef __va_arg_pack
@@ -147,7 +150,7 @@ dprintf (int __fd, const char *__restrict __fmt, ...)
 #  endif
 
 __fortify_function int
-vdprintf (int __fd, const char *__restrict __fmt, _G_va_list __ap)
+vdprintf (int __fd, const char *__restrict __fmt, __gnuc_va_list __ap)
 {
   return __vdprintf_chk (__fd, __USE_FORTIFY_LEVEL - 1, __fmt, __ap);
 }
@@ -159,7 +162,7 @@ extern int __asprintf_chk (char **__restrict __ptr, int __flag,
 			   const char *__restrict __fmt, ...)
      __THROW __attribute__ ((__format__ (__printf__, 3, 4))) __wur;
 extern int __vasprintf_chk (char **__restrict __ptr, int __flag,
-			    const char *__restrict __fmt, _G_va_list __arg)
+			    const char *__restrict __fmt, __gnuc_va_list __arg)
      __THROW __attribute__ ((__format__ (__printf__, 3, 0))) __wur;
 extern int __obstack_printf_chk (struct obstack *__restrict __obstack,
 				 int __flag, const char *__restrict __format,
@@ -168,7 +171,7 @@ extern int __obstack_printf_chk (struct obstack *__restrict __obstack,
 extern int __obstack_vprintf_chk (struct obstack *__restrict __obstack,
 				  int __flag,
 				  const char *__restrict __format,
-				  _G_va_list __args)
+				  __gnuc_va_list __args)
      __THROW __attribute__ ((__format__ (__printf__, 3, 0)));
 
 #  ifdef __va_arg_pack
@@ -205,14 +208,14 @@ __NTH (obstack_printf (struct obstack *__restrict __obstack,
 
 __fortify_function int
 __NTH (vasprintf (char **__restrict __ptr, const char *__restrict __fmt,
-		  _G_va_list __ap))
+		  __gnuc_va_list __ap))
 {
   return __vasprintf_chk (__ptr, __USE_FORTIFY_LEVEL - 1, __fmt, __ap);
 }
 
 __fortify_function int
 __NTH (obstack_vprintf (struct obstack *__restrict __obstack,
-			const char *__restrict __fmt, _G_va_list __ap))
+			const char *__restrict __fmt, __gnuc_va_list __ap))
 {
   return __obstack_vprintf_chk (__obstack, __USE_FORTIFY_LEVEL - 1, __fmt,
 				__ap);
@@ -368,7 +371,7 @@ fread_unlocked (void *__restrict __ptr, size_t __size, size_t __n,
 
       for (; __cnt > 0; --__cnt)
 	{
-	  int __c = _IO_getc_unlocked (__stream);
+	  int __c = getc_unlocked (__stream);
 	  if (__c == EOF)
 	    break;
 	  *__cptr++ = __c;
@@ -379,3 +382,5 @@ fread_unlocked (void *__restrict __ptr, size_t __size, size_t __n,
   return __fread_unlocked_alias (__ptr, __size, __n, __stream);
 }
 #endif
+
+#endif /* bits/stdio2.h.  */
diff --git a/libio/bits/types/__fpos64_t.h b/libio/bits/types/__fpos64_t.h
new file mode 100644
index 0000000..06a6891
--- /dev/null
+++ b/libio/bits/types/__fpos64_t.h
@@ -0,0 +1,16 @@
+#ifndef _____fpos64_t_defined
+#define _____fpos64_t_defined 1
+
+#include <bits/types.h>
+#include <bits/types/__mbstate_t.h>
+
+/* The tag name of this struct is _G_fpos64_t to preserve historic
+   C++ mangled names for functions taking fpos_t and/or fpos64_t
+   arguments.  That name should not be used in new code.  */
+typedef struct _G_fpos64_t
+{
+  __off64_t __pos;
+  __mbstate_t __state;
+} __fpos64_t;
+
+#endif
diff --git a/libio/bits/types/__fpos_t.h b/libio/bits/types/__fpos_t.h
new file mode 100644
index 0000000..bb04576
--- /dev/null
+++ b/libio/bits/types/__fpos_t.h
@@ -0,0 +1,16 @@
+#ifndef _____fpos_t_defined
+#define _____fpos_t_defined 1
+
+#include <bits/types.h>
+#include <bits/types/__mbstate_t.h>
+
+/* The tag name of this struct is _G_fpos_t to preserve historic
+   C++ mangled names for functions taking fpos_t arguments.
+   That name should not be used in new code.  */
+typedef struct _G_fpos_t
+{
+  __off_t __pos;
+  __mbstate_t __state;
+} __fpos_t;
+
+#endif
diff --git a/libio/bits/types/cookie_io_functions_t.h b/libio/bits/types/cookie_io_functions_t.h
new file mode 100644
index 0000000..a6d9d39
--- /dev/null
+++ b/libio/bits/types/cookie_io_functions_t.h
@@ -0,0 +1,63 @@
+/* Copyright (C) 1991-2018 Free Software Foundation, Inc.
+   This file is part of the GNU C Library.
+
+   The GNU C Library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Lesser General Public
+   License as published by the Free Software Foundation; either
+   version 2.1 of the License, or (at your option) any later version.
+
+   The GNU C Library is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+   Lesser General Public License for more details.
+
+   You should have received a copy of the GNU Lesser General Public
+   License along with the GNU C Library; if not, see
+   <http://www.gnu.org/licenses/>.  */
+
+#ifndef __cookie_io_functions_t_defined
+#define __cookie_io_functions_t_defined 1
+
+#include <bits/types.h>
+
+/* Functions to do I/O and file management for a stream.  */
+
+/* Read NBYTES bytes from COOKIE into a buffer pointed to by BUF.
+   Return number of bytes read.  */
+typedef __ssize_t cookie_read_function_t (void *__cookie, char *__buf,
+                                          size_t __nbytes);
+
+/* Write NBYTES bytes pointed to by BUF to COOKIE.  Write all NBYTES bytes
+   unless there is an error.  Return number of bytes written.  If
+   there is an error, return 0 and do not write anything.  If the file
+   has been opened for append (__mode.__append set), then set the file
+   pointer to the end of the file and then do the write; if not, just
+   write at the current file pointer.  */
+typedef __ssize_t cookie_write_function_t (void *__cookie, const char *__buf,
+                                           size_t __nbytes);
+
+/* Move COOKIE's file position to *POS bytes from the
+   beginning of the file (if W is SEEK_SET),
+   the current position (if W is SEEK_CUR),
+   or the end of the file (if W is SEEK_END).
+   Set *POS to the new file position.
+   Returns zero if successful, nonzero if not.  */
+typedef int cookie_seek_function_t (void *__cookie, __off64_t *__pos, int __w);
+
+/* Close COOKIE.  */
+typedef int cookie_close_function_t (void *__cookie);
+
+/* The structure with the cookie function pointers.
+   The tag name of this struct is _IO_cookie_io_functions_t to
+   preserve historic C++ mangled names for functions taking
+   cookie_io_functions_t arguments.  That name should not be used in
+   new code.  */
+typedef struct _IO_cookie_io_functions_t
+{
+  cookie_read_function_t *read;		/* Read bytes.  */
+  cookie_write_function_t *write;	/* Write bytes.  */
+  cookie_seek_function_t *seek;		/* Seek/tell file position.  */
+  cookie_close_function_t *close;	/* Close file.  */
+} cookie_io_functions_t;
+
+#endif
diff --git a/libio/bits/types/struct_FILE.h b/libio/bits/types/struct_FILE.h
new file mode 100644
index 0000000..a120c76
--- /dev/null
+++ b/libio/bits/types/struct_FILE.h
@@ -0,0 +1,120 @@
+/* Copyright (C) 1991-2018 Free Software Foundation, Inc.
+   This file is part of the GNU C Library.
+
+   The GNU C Library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Lesser General Public
+   License as published by the Free Software Foundation; either
+   version 2.1 of the License, or (at your option) any later version.
+
+   The GNU C Library is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+   Lesser General Public License for more details.
+
+   You should have received a copy of the GNU Lesser General Public
+   License along with the GNU C Library; if not, see
+   <http://www.gnu.org/licenses/>.  */
+
+#ifndef __struct_FILE_defined
+#define __struct_FILE_defined 1
+
+/* Caution: The contents of this file are not part of the official
+   stdio.h API.  However, much of it is part of the official *binary*
+   interface, and therefore cannot be changed.  */
+
+#if defined _IO_USE_OLD_IO_FILE && !defined _LIBC
+# error "_IO_USE_OLD_IO_FILE should only be defined when building libc itself"
+#endif
+
+#if defined _IO_lock_t_defined && !defined _LIBC
+# error "_IO_lock_t_defined should only be defined when building libc itself"
+#endif
+
+#include <bits/types.h>
+
+struct _IO_FILE;
+struct _IO_marker;
+struct _IO_codecvt;
+struct _IO_wide_data;
+
+/* During the build of glibc itself, _IO_lock_t will already have been
+   defined by internal headers.  */
+#ifndef _IO_lock_t_defined
+typedef void _IO_lock_t;
+#endif
+
+/* The tag name of this struct is _IO_FILE to preserve historic
+   C++ mangled names for functions taking FILE* arguments.
+   That name should not be used in new code.  */
+struct _IO_FILE
+{
+  int _flags;		/* High-order word is _IO_MAGIC; rest is flags. */
+
+  /* The following pointers correspond to the C++ streambuf protocol. */
+  char *_IO_read_ptr;	/* Current read pointer */
+  char *_IO_read_end;	/* End of get area. */
+  char *_IO_read_base;	/* Start of putback+get area. */
+  char *_IO_write_base;	/* Start of put area. */
+  char *_IO_write_ptr;	/* Current put pointer. */
+  char *_IO_write_end;	/* End of put area. */
+  char *_IO_buf_base;	/* Start of reserve area. */
+  char *_IO_buf_end;	/* End of reserve area. */
+
+  /* The following fields are used to support backing up and undo. */
+  char *_IO_save_base; /* Pointer to start of non-current get area. */
+  char *_IO_backup_base;  /* Pointer to first valid character of backup area */
+  char *_IO_save_end; /* Pointer to end of non-current get area. */
+
+  struct _IO_marker *_markers;
+
+  struct _IO_FILE *_chain;
+
+  int _fileno;
+  int _flags2;
+  __off_t _old_offset; /* This used to be _offset but it's too small.  */
+
+  /* 1+column number of pbase(); 0 is unknown. */
+  unsigned short _cur_column;
+  signed char _vtable_offset;
+  char _shortbuf[1];
+
+  _IO_lock_t *_lock;
+#ifdef _IO_USE_OLD_IO_FILE
+};
+
+struct _IO_FILE_complete
+{
+  struct _IO_FILE _file;
+#endif
+  __off64_t _offset;
+  /* Wide character stream stuff.  */
+  struct _IO_codecvt *_codecvt;
+  struct _IO_wide_data *_wide_data;
+  struct _IO_FILE *_freeres_list;
+  void *_freeres_buf;
+  size_t __pad5;
+  int _mode;
+  /* Make sure we don't get into trouble again.  */
+  char _unused2[15 * sizeof (int) - 4 * sizeof (void *) - sizeof (size_t)];
+};
+
+/* These macros are used by bits/stdio.h and internal headers.  */
+#define __getc_unlocked_body(_fp)					\
+  (__glibc_unlikely ((_fp)->_IO_read_ptr >= (_fp)->_IO_read_end)	\
+   ? __uflow (_fp) : *(unsigned char *) (_fp)->_IO_read_ptr++)
+
+#define __putc_unlocked_body(_ch, _fp)					\
+  (__glibc_unlikely ((_fp)->_IO_write_ptr >= (_fp)->_IO_write_end)	\
+   ? __overflow (_fp, (unsigned char) (_ch))				\
+   : (unsigned char) (*(_fp)->_IO_write_ptr++ = (_ch)))
+
+#define _IO_EOF_SEEN 0x10
+#define __feof_unlocked_body(_fp) (((_fp)->_flags & _IO_EOF_SEEN) != 0)
+
+#define _IO_ERR_SEEN 0x20
+#define __ferror_unlocked_body(_fp) (((_fp)->_flags & _IO_ERR_SEEN) != 0)
+
+#define _IO_USER_LOCK 0x8000
+/* Many more flag bits are defined internally.  */
+
+#endif
diff --git a/libio/iolibio.h b/libio/iolibio.h
index 621b31c..7814b1d 100644
--- a/libio/iolibio.h
+++ b/libio/iolibio.h
@@ -1,4 +1,8 @@
+#ifndef _IOLIBIO_H
+#define _IOLIBIO_H 1
+
 #include <stdio.h>
+#include <bits/libio.h>
 
 /* These emulate stdio functionality, but with a different name
    (_IO_ungetc instead of ungetc), and using _IO_FILE instead of FILE. */
@@ -94,3 +98,5 @@ _IO_FILE *__old_freopen (const char *, const char *, _IO_FILE *) __THROW;
 #ifdef __cplusplus
 }
 #endif
+
+#endif /* iolibio.h.  */
diff --git a/libio/libio.h b/libio/libio.h
deleted file mode 100644
index 47a2508..0000000
--- a/libio/libio.h
+++ /dev/null
@@ -1,25 +0,0 @@
-/* Copyright (C) 2017-2018 Free Software Foundation, Inc.
-   This file is part of the GNU C Library.
-
-   The GNU C Library is free software; you can redistribute it and/or
-   modify it under the terms of the GNU Lesser General Public
-   License as published by the Free Software Foundation; either
-   version 2.1 of the License, or (at your option) any later version.
-
-   The GNU C Library is distributed in the hope that it will be useful,
-   but WITHOUT ANY WARRANTY; without even the implied warranty of
-   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-   Lesser General Public License for more details.
-
-   You should have received a copy of the GNU Lesser General Public
-   License along with the GNU C Library; if not, see
-   <http://www.gnu.org/licenses/>.  */
-
-#ifndef _LIBIO_H
-#define _LIBIO_H 1
-
-#warning "<libio.h> is deprecated; use <stdio.h> instead."
-
-#include <bits/libio.h>
-
-#endif
diff --git a/libio/libioP.h b/libio/libioP.h
index 068ceb2..ac66f95 100644
--- a/libio/libioP.h
+++ b/libio/libioP.h
@@ -32,6 +32,9 @@
 
    FIXME: All of the C++ cruft eventually needs to go away.  */
 
+#ifndef _LIBIOP_H
+#define _LIBIOP_H 1
+
 #include <stddef.h>
 
 #include <errno.h>
@@ -39,6 +42,8 @@
 
 #include <math_ldbl_opt.h>
 
+#include <stdio.h>
+#include <bits/libio.h>
 #include "iolibio.h"
 
 #ifdef __cplusplus
@@ -876,3 +881,5 @@ IO_validate_vtable (const struct _IO_jump_t *vtable)
     _IO_vtable_check ();
   return vtable;
 }
+
+#endif /* libioP.h.  */
diff --git a/libio/stdio.h b/libio/stdio.h
index 33de381..731f8e5 100644
--- a/libio/stdio.h
+++ b/libio/stdio.h
@@ -32,18 +32,24 @@ __BEGIN_DECLS
 #define __need_NULL
 #include <stddef.h>
 
+#define __need___va_list
+#include <stdarg.h>
+
 #include <bits/types.h>
+#include <bits/types/__fpos_t.h>
+#include <bits/types/__fpos64_t.h>
 #include <bits/types/__FILE.h>
 #include <bits/types/FILE.h>
+#include <bits/types/struct_FILE.h>
 
-#define _STDIO_USES_IOSTREAM
-
-#include <bits/libio.h>
+#ifdef __USE_GNU
+# include <bits/types/cookie_io_functions_t.h>
+#endif
 
 #if defined __USE_XOPEN || defined __USE_XOPEN2K8
 # ifdef __GNUC__
 #  ifndef _VA_LIST_DEFINED
-typedef _G_va_list va_list;
+typedef __gnuc_va_list va_list;
 #   define _VA_LIST_DEFINED
 #  endif
 # else
@@ -75,12 +81,12 @@ typedef __ssize_t ssize_t;
 
 /* The type of the second argument to `fgetpos' and `fsetpos'.  */
 #ifndef __USE_FILE_OFFSET64
-typedef _G_fpos_t fpos_t;
+typedef __fpos_t fpos_t;
 #else
-typedef _G_fpos64_t fpos_t;
+typedef __fpos64_t fpos_t;
 #endif
 #ifdef __USE_LARGEFILE64
-typedef _G_fpos64_t fpos64_t;
+typedef __fpos64_t fpos64_t;
 #endif
 
 /* The possibilities for the third argument to `setvbuf'.  */
@@ -90,16 +96,12 @@ typedef _G_fpos64_t fpos64_t;
 
 
 /* Default buffer size.  */
-#ifndef BUFSIZ
-# define BUFSIZ _IO_BUFSIZ
-#endif
+#define BUFSIZ 8192
 
 
-/* End of file character.
-   Some things throughout the library rely on this being -1.  */
-#ifndef EOF
-# define EOF (-1)
-#endif
+/* The value returned by fgetc and similar functions to indicate the
+   end of the file.  */
+#define EOF (-1)
 
 
 /* The possibilities for the third argument to `fseek'.
@@ -132,9 +134,9 @@ typedef _G_fpos64_t fpos64_t;
 
 
 /* Standard streams.  */
-extern struct _IO_FILE *stdin;		/* Standard input stream.  */
-extern struct _IO_FILE *stdout;		/* Standard output stream.  */
-extern struct _IO_FILE *stderr;		/* Standard error output stream.  */
+extern FILE *stdin;		/* Standard input stream.  */
+extern FILE *stdout;		/* Standard output stream.  */
+extern FILE *stderr;		/* Standard error output stream.  */
 /* C89/C99 say they're macros.  Make them happy.  */
 #define stdin stdin
 #define stdout stdout
@@ -270,7 +272,7 @@ extern FILE *fdopen (int __fd, const char *__modes) __THROW __wur;
    and uses the given functions for input and output.  */
 extern FILE *fopencookie (void *__restrict __magic_cookie,
 			  const char *__restrict __modes,
-			  _IO_cookie_io_functions_t __io_funcs) __THROW __wur;
+			  cookie_io_functions_t __io_funcs) __THROW __wur;
 #endif
 
 #if defined __USE_XOPEN2K8 || __GLIBC_USE (LIB_EXT2)
@@ -325,15 +327,15 @@ extern int sprintf (char *__restrict __s,
    This function is a possible cancellation point and therefore not
    marked with __THROW.  */
 extern int vfprintf (FILE *__restrict __s, const char *__restrict __format,
-		     _G_va_list __arg);
+		     __gnuc_va_list __arg);
 /* Write formatted output to stdout from argument list ARG.
 
    This function is a possible cancellation point and therefore not
    marked with __THROW.  */
-extern int vprintf (const char *__restrict __format, _G_va_list __arg);
+extern int vprintf (const char *__restrict __format, __gnuc_va_list __arg);
 /* Write formatted output to S from argument list ARG.  */
 extern int vsprintf (char *__restrict __s, const char *__restrict __format,
-		     _G_va_list __arg) __THROWNL;
+		     __gnuc_va_list __arg) __THROWNL;
 
 #if defined __USE_ISOC99 || defined __USE_UNIX98
 /* Maximum chars of output to write in MAXLEN.  */
@@ -342,7 +344,7 @@ extern int snprintf (char *__restrict __s, size_t __maxlen,
      __THROWNL __attribute__ ((__format__ (__printf__, 3, 4)));
 
 extern int vsnprintf (char *__restrict __s, size_t __maxlen,
-		      const char *__restrict __format, _G_va_list __arg)
+		      const char *__restrict __format, __gnuc_va_list __arg)
      __THROWNL __attribute__ ((__format__ (__printf__, 3, 0)));
 #endif
 
@@ -350,7 +352,7 @@ extern int vsnprintf (char *__restrict __s, size_t __maxlen,
 /* Write formatted output to a string dynamically allocated with `malloc'.
    Store the address of the string in *PTR.  */
 extern int vasprintf (char **__restrict __ptr, const char *__restrict __f,
-		      _G_va_list __arg)
+		      __gnuc_va_list __arg)
      __THROWNL __attribute__ ((__format__ (__printf__, 2, 0))) __wur;
 extern int __asprintf (char **__restrict __ptr,
 		       const char *__restrict __fmt, ...)
@@ -363,7 +365,7 @@ extern int asprintf (char **__restrict __ptr,
 #ifdef __USE_XOPEN2K8
 /* Write formatted output to a file descriptor.  */
 extern int vdprintf (int __fd, const char *__restrict __fmt,
-		     _G_va_list __arg)
+		     __gnuc_va_list __arg)
      __attribute__ ((__format__ (__printf__, 2, 0)));
 extern int dprintf (int __fd, const char *__restrict __fmt, ...)
      __attribute__ ((__format__ (__printf__, 2, 3)));
@@ -418,19 +420,19 @@ extern int __isoc99_sscanf (const char *__restrict __s,
    This function is a possible cancellation point and therefore not
    marked with __THROW.  */
 extern int vfscanf (FILE *__restrict __s, const char *__restrict __format,
-		    _G_va_list __arg)
+		    __gnuc_va_list __arg)
      __attribute__ ((__format__ (__scanf__, 2, 0))) __wur;
 
 /* Read formatted input from stdin into argument list ARG.
 
    This function is a possible cancellation point and therefore not
    marked with __THROW.  */
-extern int vscanf (const char *__restrict __format, _G_va_list __arg)
+extern int vscanf (const char *__restrict __format, __gnuc_va_list __arg)
      __attribute__ ((__format__ (__scanf__, 1, 0))) __wur;
 
 /* Read formatted input from S into argument list ARG.  */
 extern int vsscanf (const char *__restrict __s,
-		    const char *__restrict __format, _G_va_list __arg)
+		    const char *__restrict __format, __gnuc_va_list __arg)
      __THROW __attribute__ ((__format__ (__scanf__, 2, 0)));
 
 # if !defined __USE_GNU \
@@ -442,26 +444,26 @@ extern int vsscanf (const char *__restrict __s,
    s, S or [.  */
 extern int __REDIRECT (vfscanf,
 		       (FILE *__restrict __s,
-			const char *__restrict __format, _G_va_list __arg),
+			const char *__restrict __format, __gnuc_va_list __arg),
 		       __isoc99_vfscanf)
      __attribute__ ((__format__ (__scanf__, 2, 0))) __wur;
 extern int __REDIRECT (vscanf, (const char *__restrict __format,
-				_G_va_list __arg), __isoc99_vscanf)
+				__gnuc_va_list __arg), __isoc99_vscanf)
      __attribute__ ((__format__ (__scanf__, 1, 0))) __wur;
 extern int __REDIRECT_NTH (vsscanf,
 			   (const char *__restrict __s,
 			    const char *__restrict __format,
-			    _G_va_list __arg), __isoc99_vsscanf)
+			    __gnuc_va_list __arg), __isoc99_vsscanf)
      __attribute__ ((__format__ (__scanf__, 2, 0)));
 #  else
 extern int __isoc99_vfscanf (FILE *__restrict __s,
 			     const char *__restrict __format,
-			     _G_va_list __arg) __wur;
+			     __gnuc_va_list __arg) __wur;
 extern int __isoc99_vscanf (const char *__restrict __format,
-			    _G_va_list __arg) __wur;
+			    __gnuc_va_list __arg) __wur;
 extern int __isoc99_vsscanf (const char *__restrict __s,
 			     const char *__restrict __format,
-			     _G_va_list __arg) __THROW;
+			     __gnuc_va_list __arg) __THROW;
 #   define vfscanf __isoc99_vfscanf
 #   define vscanf __isoc99_vscanf
 #   define vsscanf __isoc99_vsscanf
@@ -592,12 +594,12 @@ extern char *fgets_unlocked (char *__restrict __s, int __n,
    cancellation point.  But due to similarity with an POSIX interface
    or due to the implementation they are cancellation points and
    therefore not marked with __THROW.  */
-extern _IO_ssize_t __getdelim (char **__restrict __lineptr,
-			       size_t *__restrict __n, int __delimiter,
-			       FILE *__restrict __stream) __wur;
-extern _IO_ssize_t getdelim (char **__restrict __lineptr,
-			     size_t *__restrict __n, int __delimiter,
-			     FILE *__restrict __stream) __wur;
+extern __ssize_t __getdelim (char **__restrict __lineptr,
+                             size_t *__restrict __n, int __delimiter,
+                             FILE *__restrict __stream) __wur;
+extern __ssize_t getdelim (char **__restrict __lineptr,
+                           size_t *__restrict __n, int __delimiter,
+                           FILE *__restrict __stream) __wur;
 
 /* Like `getdelim', but reads up to a newline.
 
@@ -605,9 +607,9 @@ extern _IO_ssize_t getdelim (char **__restrict __lineptr,
    cancellation point.  But due to similarity with an POSIX interface
    or due to the implementation it is a cancellation point and
    therefore not marked with __THROW.  */
-extern _IO_ssize_t getline (char **__restrict __lineptr,
-			    size_t *__restrict __n,
-			    FILE *__restrict __stream) __wur;
+extern __ssize_t getline (char **__restrict __lineptr,
+                          size_t *__restrict __n,
+                          FILE *__restrict __stream) __wur;
 #endif
 
 
@@ -820,7 +822,7 @@ extern int obstack_printf (struct obstack *__restrict __obstack,
      __THROWNL __attribute__ ((__format__ (__printf__, 2, 3)));
 extern int obstack_vprintf (struct obstack *__restrict __obstack,
 			    const char *__restrict __format,
-			    _G_va_list __args)
+			    __gnuc_va_list __args)
      __THROWNL __attribute__ ((__format__ (__printf__, 2, 0)));
 #endif /* Use GNU.  */
 
@@ -845,6 +847,11 @@ extern void funlockfile (FILE *__stream) __THROW;
 # include <bits/getopt_posix.h>
 #endif
 
+/* Slow-path routines used by the optimized inline functions in
+   bits/stdio.h.  */
+extern int __uflow (FILE *);
+extern int __overflow (FILE *, int);
+
 /* If we are compiling with optimizing read this file.  It contains
    several optimizing inline functions and macros.  */
 #ifdef __USE_EXTERN_INLINES
diff --git a/scripts/check-installed-headers.sh b/scripts/check-installed-headers.sh
index 3384e1c..7ffd2b8 100644
--- a/scripts/check-installed-headers.sh
+++ b/scripts/check-installed-headers.sh
@@ -84,11 +84,6 @@ for header in "$@"; do
         (sys/elf.h)
             continue;;
 
-        # libio.h and _G_config.h are deprecation stubs containing #warnings
-        # to use stdio.h instead.
-        (libio.h | _G_config.h)
-            continue;;
-
 	# sys/sysctl.h is unsupported for x32.
 	(sys/sysctl.h)
             case "$is_x32" in
diff --git a/sysdeps/unix/sysv/linux/bits/_G_config.h b/sysdeps/unix/sysv/linux/bits/_G_config.h
index 9994869..05a64ac 100644
--- a/sysdeps/unix/sysv/linux/bits/_G_config.h
+++ b/sysdeps/unix/sysv/linux/bits/_G_config.h
@@ -4,10 +4,6 @@
 #ifndef _BITS_G_CONFIG_H
 #define _BITS_G_CONFIG_H 1
 
-#if !defined _BITS_LIBIO_H && !defined _G_CONFIG_H
-# error "Never include <bits/_G_config.h> directly; use <stdio.h> instead."
-#endif
-
 /* Define types for libio in terms of the standard internal type names.  */
 
 #include <bits/types.h>
@@ -19,20 +15,16 @@
 #include <stddef.h>
 
 #include <bits/types/__mbstate_t.h>
+#include <bits/types/__fpos_t.h>
+#include <bits/types/__fpos64_t.h>
+
+#define _G_fpos_t __fpos_t
+#define _G_fpos64_t __fpos64_t
+
 #if defined _LIBC || defined _GLIBCPP_USE_WCHAR_T
 # include <bits/types/wint_t.h>
 #endif
 
-typedef struct
-{
-  __off_t __pos;
-  __mbstate_t __state;
-} _G_fpos_t;
-typedef struct
-{
-  __off64_t __pos;
-  __mbstate_t __state;
-} _G_fpos64_t;
 #if defined _LIBC || defined _GLIBCPP_USE_WCHAR_T
 # include <gconv.h>
 typedef union

-----------------------------------------------------------------------

Summary of changes:
 ChangeLog                                  |  109 ++++++
 NEWS                                       |    4 +
 bits/_G_config.h                           |   62 ----
 conform/data/stdio.h-data                  |    2 +-
 csu/init.c                                 |   13 +-
 include/bits/libio.h                       |   45 ---
 include/bits/types/__fpos64_t.h            |    1 +
 include/bits/types/__fpos_t.h              |    1 +
 include/bits/types/cookie_io_functions_t.h |    1 +
 include/bits/types/struct_FILE.h           |    1 +
 include/stdio.h                            |   33 +-
 libio/Makefile                             |    9 +-
 libio/_G_config.h                          |   25 --
 libio/bits/libio-ldbl.h                    |   29 --
 libio/bits/libio.h                         |  527 ----------------------------
 libio/bits/stdio.h                         |   29 +-
 libio/bits/stdio2.h                        |   35 +-
 libio/bits/types/__fpos64_t.h              |   16 +
 libio/bits/types/__fpos_t.h                |   16 +
 libio/bits/types/cookie_io_functions_t.h   |   63 ++++
 libio/bits/types/struct_FILE.h             |  120 +++++++
 libio/filedoalloc.c                        |    2 +-
 libio/fileops.c                            |    2 +-
 libio/iofdopen.c                           |    4 +-
 libio/iofopen.c                            |    2 +-
 libio/iolibio.h                            |    6 +
 libio/libio.h                              |  404 +++++++++++++++++++++-
 libio/libioP.h                             |   27 +-
 libio/stdio.h                              |   95 +++---
 scripts/check-installed-headers.sh         |    5 -
 sysdeps/generic/_G_config.h                |   15 +
 sysdeps/ieee754/ldbl-opt/nldbl-compat.h    |   13 +-
 sysdeps/unix/sysv/linux/_G_config.h        |   15 +
 sysdeps/unix/sysv/linux/bits/_G_config.h   |   63 ----
 34 files changed, 915 insertions(+), 879 deletions(-)
 delete mode 100644 bits/_G_config.h
 delete mode 100644 include/bits/libio.h
 create mode 100644 include/bits/types/__fpos64_t.h
 create mode 100644 include/bits/types/__fpos_t.h
 create mode 100644 include/bits/types/cookie_io_functions_t.h
 create mode 100644 include/bits/types/struct_FILE.h
 delete mode 100644 libio/_G_config.h
 delete mode 100644 libio/bits/libio-ldbl.h
 delete mode 100644 libio/bits/libio.h
 create mode 100644 libio/bits/types/__fpos64_t.h
 create mode 100644 libio/bits/types/__fpos_t.h
 create mode 100644 libio/bits/types/cookie_io_functions_t.h
 create mode 100644 libio/bits/types/struct_FILE.h
 create mode 100644 sysdeps/generic/_G_config.h
 create mode 100644 sysdeps/unix/sysv/linux/_G_config.h
 delete mode 100644 sysdeps/unix/sysv/linux/bits/_G_config.h


hooks/post-receive
-- 
GNU C Library master sources


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]