diff options
author | Zack Weinberg <zackw@panix.com> | 2018-02-05 14:13:41 -0500 |
---|---|---|
committer | Zack Weinberg <zackw@panix.com> | 2018-02-07 10:10:32 -0500 |
commit | 63fb8f9aa9d19f85599afe4b849b567aefd70a36 (patch) | |
tree | 607f89b682d7c7200b389cba7de7e4496806565f /libio | |
parent | 6c6c962a202299b55d180e04f44a63ffb748096c (diff) | |
download | glibc-63fb8f9aa9d19f85599afe4b849b567aefd70a36.zip glibc-63fb8f9aa9d19f85599afe4b849b567aefd70a36.tar.gz glibc-63fb8f9aa9d19f85599afe4b849b567aefd70a36.tar.bz2 |
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.c | 2 | ||||
-rw-r--r-- | libio/fileops.c | 2 | ||||
-rw-r--r-- | libio/iofdopen.c | 4 | ||||
-rw-r--r-- | libio/iofopen.c | 2 | ||||
-rw-r--r-- | libio/libio.h | 22 | ||||
-rw-r--r-- | libio/libioP.h | 20 |
6 files changed, 33 insertions, 19 deletions
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 |