about summary refs log tree commit diff
path: root/libio
diff options
context:
space:
mode:
authorZack Weinberg <zackw@panix.com>2018-02-05 14:13:41 -0500
committerZack Weinberg <zackw@panix.com>2018-02-07 10:10:32 -0500
commit63fb8f9aa9d19f85599afe4b849b567aefd70a36 (patch)
tree607f89b682d7c7200b389cba7de7e4496806565f /libio
parent6c6c962a202299b55d180e04f44a63ffb748096c (diff)
downloadglibc-63fb8f9aa9d19f85599afe4b849b567aefd70a36.tar.gz
glibc-63fb8f9aa9d19f85599afe4b849b567aefd70a36.tar.xz
glibc-63fb8f9aa9d19f85599afe4b849b567aefd70a36.zip
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.
Diffstat (limited to 'libio')
-rw-r--r--libio/filedoalloc.c2
-rw-r--r--libio/fileops.c2
-rw-r--r--libio/iofdopen.c4
-rw-r--r--libio/iofopen.c2
-rw-r--r--libio/libio.h22
-rw-r--r--libio/libioP.h20
6 files changed, 33 insertions, 19 deletions
diff --git a/libio/filedoalloc.c b/libio/filedoalloc.c
index 329843827f..d6517e493b 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 6d5393cea3..5fd8a9647f 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 3546d52b4d..b6f1500dee 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 d6f59497b4..2ea82e2091 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 ff67e18c18..0953120247 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 8edc207277..58cc9de094 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