summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorZack Weinberg <zackw@panix.com>2017-04-20 11:21:30 -0400
committerZack Weinberg <zackw@panix.com>2017-08-23 07:52:27 -0400
commit6d350b3b179175b52172bd2cdd7de62186b3860d (patch)
tree9a16b8f077dd5dbafb28cba9361a36787aa2d9d7
parent5a706f649de3952271930a8340db4ca8aa50f485 (diff)
downloadglibc-zack/dont-install-libio-h.tar.gz
Don't install libio.h or _G_config.h.zack/dont-install-libio-h
This is an experimental patch which removes libio.h (and _G_config.h) from the set of application-exposed headers. After this change, the public stdio.h does not define any symbols whose names begin with _G_ nor _IO_, except that when optimizing, the guts of struct _IO_FILE and three of the flag constants are visible (see bits/stdio.h and bits/types/FILE_internals.h). There is a small amount of code duplication in bits/stdio.h, of macro bodies from libio.h that are no longer available. A number of internal .c files that were manually doing PLT bypass for flockfile/funlockfile can now rely on include/stdio.h to do it for them. It passes the testsuite on x86_64-linux, but it needs a great deal of additional testing; in particular I'm almost certain I broke the support for old-format (GLIBC_2.0) struct _IO_FILE, which is configured out on this target. Testing this properly would require someone to get their hands on _really_ old binaries, compiled against glibc 2.0, possibly statically-linked-but-using-NSS. Unfortunately, libc.so cannot be expected to be binary identical. However, this should be ready to feed into archive rebuilds to find out what applications break. Substantial clean-ups to the libio implementation are possible if this sticks, but I haven't done 'em; this is intended to be minimal. * libio/Makefile: Don't install libio.h or _G_config.h. Do install bits/types/FILE_internals.h, bits/types/cookie_io_functions_t.h, and bits/types/__fpos_t.h. * libio/stdio.h: Don't include libio.h. Get __gnuc_va_list directly from stdarg.h, __fpos_t and __fpos64_t from bits/types/__fpos_t.h, and the cookie types from bits/types/cookie_io_functions_t.h. Change all uses of _G_va_list, _G_fpos_t, _G_fpos64_t, _IO_FILE, _IO_cookie_io_functions_t, and _IO_ssize_t to __gnuc_va_list, __fpos_t, __fpos64_t, FILE, cookie_io_functions_t, and __ssize_t respectively. Do not define getc nor putc as macros. Define BUFSIZ as literal 8192. * libio/bits/types/FILE_internals.h: New header. Provide complete definition of struct _IO_FILE (the complete version) here. Duplicate definitions of _IO_EOF_SEEN, _IO_ERR_SEEN, and _IO_USER_LOCK here, with value assertions if they are already defined. * libio/bits/types/__fpos_t.h: New header. Define __fpos_t and __fpos64_t here. * libio/bits/types/cookie_io_functions_t.h: New header. Define cookie_read_function_t, cookie_write_function_t, cookie_seek_function_t, cookie_close_function_t, and cookie_io_functions_t here. * libio/libio.h: Include features.h first thing, then error out if either _LIBC or __USE_GNU is not defined, or if _ISOMAC is defined. Inline all of _G_config.h except _G_HAVE_MREMAP here. Get definitions of __mbstate_t, __fpos_t, __fpos64_t, struct _IO_FILE, and the cookie-related types from the relevant bits/types headers. Get definition of NULL from stddef.h. Make all #ifdef _LIBC and #if __GNUC__ >= (2,3) blocks unconditional. Remove all #if 0 and #ifdef __cplusplus blocks. Change all uses of _G_va_list, _G_fpos_t, and _G_fpos64_t to __gnuc_va_list, __fpos_t, __fpos64_t respectively. Provide definitions of _STDIO_USES_IOSTREAM, __HAVE_COLUMN, _IO_file_flags, __io_read_fn, __io_write_fn, __io_seek_fn, __io_close_fn, _IO_cookie_io_functions_t for the sake of the implementation. When _IO_USE_OLD_IO_FILE is defined, define struct _IO_FILE_old. * libio/libioP.h: When _IO_USE_OLD_IO_FILE is defined, define struct _IO_FILE_old_plus. Only declare _IO_old_file_init_internal when _IO_USE_OLD_IO_FILE is defined, and have it take an argument of type struct _IO_FILE_old_plus. * libio/oldfileops.c: Change all uses of _IO_FILE to _IO_FILE_old, _IO_FILE_plus to _IO_FILE_old_plus, _IO_FILE_complete to _IO_FILE, and _IO_FILE_complete_plus to _IO_FILE_plus. Then adjust types to match caller/callee's expectations. * libio/oldiofdopen.c, libio/oldiofopen.c, libio/oldiopopen.c * libio/oldstdfiles.c: Likewise. * sysdeps/generic/_G_config.h, sysdeps/unix/sysv/linux/_G_config.h: Only provide definition or non-definition of _G_HAVE_MREMAP. * sysdeps/ieee754/ldbl-opt/nldbl-iovfscanf.c: Delete file. * sysdeps/ieee754/ldbl-opt/Makefile (libnldbl-calls): Remove iovfscanf. * sysdeps/ieee754/ldbl-opt/nldbl-compat.c: Define __nldbl__IO_vsprintf as alias to __nldbl_vsprintf instead of the other way around. * sysdeps/ieee754/ldbl-opt/nldbl-compat.h: Change all uses of _G_va_list to __gnuc_va_list. Remove NLDBL_DECL for _IO_vfscanf. * sysdeps/ieee754/ldbl-opt/nldbl-fscanf.c * sysdeps/ieee754/ldbl-opt/nldbl-scanf.c * sysdeps/ieee754/ldbl-opt/nldbl-vfscanf.c * sysdeps/ieee754/ldbl-opt/nldbl-vscanf.c: Use __nldbl_vfscanf, not __nldbl__IO_vfscanf. * libio/bits/stdio.h: Add multiple-inclusion guard. Include bits/types/FILE_internals.h. Declare __uflow and __overflow here. Remove redundant __USE_EXTERN_INLINES ifdef. Change all uses of _G_va_list to __gnuc_va_list and _IO_ssize_t to __ssize_t. (getchar): Use getc, not _IO_getc. (__getc_unlocked, __putc_unlocked): New inlines, duplicating the bodies of _IO_getc_unlocked and _IO_putc_unlocked. (fgetc_unlocked, getc_unlocked, getchar_unlocked, fread_unlocked): Use __getc_unlocked. (fputc_unlocked, putc_unlocked, putchar_unlocked, fwrite_unlocked): Use __putc_unlocked. (feof_unlocked): Duplicate the body of _IO_feof_unlocked here. (ferror_unlocked): Duplicate the body of _IO_ferror_unlocked here. * libio/bits/stdio2.h: Change all uses of _G_va_list to __gnuc_va_list. (fread_unlocked): Use __getc_unlocked. * libio/bits/types/FILE.h, libio/bits/types/__FILE.h: Explain in comments why the name _IO_FILE is used. * include/stdio.h: Change all uses of _G_va_list to __gnuc_va_list, _IO_ssize_t to __size_t, _IO_FILE to FILE, and _IO_fpos_t to __fpos_t. When IS_IN (libc), redirect flockfile and funlockfile to __flockfile and __funlockfile respectively. When _IO_MTSAFE_IO and not _ISOMAC, include stdio-lock.h before stdio.h proper. * include/stdio_ext.h: Include bits/types/FILE_internals.h for the sake of the inline definition of __fsetlocking. * include/libio.h: Adjust #ifdef nest to activate multiple-include optimization. * include/bits/types/FILE_internals.h, include/bits/types/__fpos_t.h * include/bits/types/cookie_io_functions_t.h: New trivial wrappers. * include/bits/stdio.h: New wrapper; mark __uflow and __overflow as hidden for intra-libc callers. * csu/init.c: Include libio.h, not _G_config.h. * grp/fgetgrent_r.c, grp/putgrent.c, gshadow/fgetsgent_r.c * gshadow/putsgent.c, misc/getpass.c, misc/getttyent.c * misc/mntent_r.c, posix/getopt.c, pwd/fgetpwent_r.c * shadow/fgetspent_r.c, shadow/putspent.c: Don't include libio/iolibio.h. Don't redefine flockfile or funlockfile. Don't use _IO_flockfile or _IO_funlockfile. * libio/__fbufsize.c, libio/__flbf.c, libio/__fpending.c * libio/__freadable.c, libio/__freading.c, libio/__fwritable.c * libio/__fwriting.c, malloc/malloc.c: Include libio.h. * misc/err.c: Include libio.h. Don't redefine flockfile or funlockfile. * stdio-common/tstgetln.c: Include sys/types.h. Don't redefine ssize_t. * conform/data/stdio.h-data: va_list may be defined as __gnuc_va_list, not _G_va_list. * benchtests/strcoll-inputs/filelist#en_US.UTF-8: Remove _G_config.h.
-rw-r--r--benchtests/strcoll-inputs/filelist#en_US.UTF-82
-rw-r--r--conform/data/stdio.h-data2
-rw-r--r--csu/init.c2
-rw-r--r--grp/fgetgrent_r.c4
-rw-r--r--grp/putgrent.c3
-rw-r--r--gshadow/fgetsgent_r.c8
-rw-r--r--gshadow/putsgent.c4
-rw-r--r--include/bits/stdio.h9
-rw-r--r--include/bits/types/FILE_internals.h1
-rw-r--r--include/bits/types/__fpos_t.h1
-rw-r--r--include/bits/types/cookie_io_functions_t.h1
-rw-r--r--include/libio.h18
-rw-r--r--include/stdio.h51
-rw-r--r--include/stdio_ext.h1
-rw-r--r--libio/Makefile7
-rw-r--r--libio/__fbufsize.c1
-rw-r--r--libio/__flbf.c1
-rw-r--r--libio/__fpending.c1
-rw-r--r--libio/__freadable.c1
-rw-r--r--libio/__freading.c1
-rw-r--r--libio/__fwritable.c1
-rw-r--r--libio/__fwriting.c1
-rw-r--r--libio/bits/stdio.h71
-rw-r--r--libio/bits/stdio2.h31
-rw-r--r--libio/bits/types/FILE.h7
-rw-r--r--libio/bits/types/FILE_internals.h110
-rw-r--r--libio/bits/types/__FILE.h5
-rw-r--r--libio/bits/types/__fpos_t.h19
-rw-r--r--libio/bits/types/cookie_io_functions_t.h61
-rw-r--r--libio/libio.h337
-rw-r--r--libio/libioP.h13
-rw-r--r--libio/oldfileops.c21
-rw-r--r--libio/oldiofdopen.c16
-rw-r--r--libio/oldiofopen.c10
-rw-r--r--libio/oldiopopen.c12
-rw-r--r--libio/oldstdfiles.c10
-rw-r--r--libio/stdio.h82
-rw-r--r--malloc/malloc.c1
-rw-r--r--misc/err.c4
-rw-r--r--misc/getpass.c2
-rw-r--r--misc/getttyent.c3
-rw-r--r--misc/mntent_r.c3
-rw-r--r--posix/getopt.c14
-rw-r--r--pwd/fgetpwent_r.c3
-rw-r--r--shadow/fgetspent_r.c2
-rw-r--r--shadow/putspent.c2
-rw-r--r--stdio-common/tstgetln.c3
-rw-r--r--sysdeps/generic/_G_config.h54
-rw-r--r--sysdeps/ieee754/ldbl-opt/Makefile2
-rw-r--r--sysdeps/ieee754/ldbl-opt/nldbl-compat.c4
-rw-r--r--sysdeps/ieee754/ldbl-opt/nldbl-compat.h14
-rw-r--r--sysdeps/ieee754/ldbl-opt/nldbl-fscanf.c2
-rw-r--r--sysdeps/ieee754/ldbl-opt/nldbl-iovfscanf.c8
-rw-r--r--sysdeps/ieee754/ldbl-opt/nldbl-scanf.c2
-rw-r--r--sysdeps/ieee754/ldbl-opt/nldbl-vfscanf.c2
-rw-r--r--sysdeps/ieee754/ldbl-opt/nldbl-vscanf.c2
-rw-r--r--sysdeps/unix/sysv/linux/_G_config.h53
57 files changed, 568 insertions, 538 deletions
diff --git a/benchtests/strcoll-inputs/filelist#en_US.UTF-8 b/benchtests/strcoll-inputs/filelist#en_US.UTF-8
index 6cee2374f4..bdc61be3b5 100644
--- a/benchtests/strcoll-inputs/filelist#en_US.UTF-8
+++ b/benchtests/strcoll-inputs/filelist#en_US.UTF-8
@@ -1370,7 +1370,6 @@ a.out.h
semget.c
posix_fallocate.c
getpid.c
-_G_config.h
getsockopt.S
pthread_setaffinity.c
setipv4sourcefilter.c
@@ -3407,7 +3406,6 @@ a.out.h
libBrokenLocale.abilist
machine-gmon.h
_itoa.h
-_G_config.h
local-setxid.h
dl-osinfo.h
dl-dtprocnum.h
diff --git a/conform/data/stdio.h-data b/conform/data/stdio.h-data
index f69802cc70..3ef2460661 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/csu/init.c b/csu/init.c
index bb68386c9b..6da0a9cd47 100644
--- a/csu/init.c
+++ b/csu/init.c
@@ -18,7 +18,7 @@
#if defined __GNUC__ && __GNUC__ >= 2
-#include <_G_config.h>
+#include <libio.h>
/* This records which stdio is linked against in the application. */
const int _IO_stdin_used = _G_IO_IO_FILE_VERSION;
diff --git a/grp/fgetgrent_r.c b/grp/fgetgrent_r.c
index 5a4107ba9c..7bcbdfe539 100644
--- a/grp/fgetgrent_r.c
+++ b/grp/fgetgrent_r.c
@@ -20,10 +20,6 @@
#include <grp.h>
#include <stdio.h>
-#include <libio/iolibio.h>
-#define flockfile(s) _IO_flockfile (s)
-#define funlockfile(s) _IO_funlockfile (s)
-
/* Define a line parsing function using the common code
used in the nss_files module. */
diff --git a/grp/putgrent.c b/grp/putgrent.c
index 5a12c70557..cd3588ded3 100644
--- a/grp/putgrent.c
+++ b/grp/putgrent.c
@@ -21,9 +21,6 @@
#include <string.h>
#include <grp.h>
-#define flockfile(s) _IO_flockfile (s)
-#define funlockfile(s) _IO_funlockfile (s)
-
#define _S(x) x ? x : ""
/* Write an entry to the given stream.
diff --git a/gshadow/fgetsgent_r.c b/gshadow/fgetsgent_r.c
index f1d0650333..95c21e960c 100644
--- a/gshadow/fgetsgent_r.c
+++ b/gshadow/fgetsgent_r.c
@@ -38,21 +38,21 @@ __fgetsgent_r (FILE *stream, struct sgrp *resbuf, char *buffer, size_t buflen,
{
char *p;
- _IO_flockfile (stream);
+ flockfile (stream);
do
{
buffer[buflen - 1] = '\xff';
p = fgets_unlocked (buffer, buflen, stream);
if (p == NULL && feof_unlocked (stream))
{
- _IO_funlockfile (stream);
+ funlockfile (stream);
*result = NULL;
__set_errno (ENOENT);
return errno;
}
if (p == NULL || buffer[buflen - 1] != '\xff')
{
- _IO_funlockfile (stream);
+ funlockfile (stream);
*result = NULL;
__set_errno (ERANGE);
return errno;
@@ -67,7 +67,7 @@ __fgetsgent_r (FILE *stream, struct sgrp *resbuf, char *buffer, size_t buflen,
! parse_line (buffer, (void *) resbuf, (void *) buffer, buflen,
&errno));
- _IO_funlockfile (stream);
+ funlockfile (stream);
*result = resbuf;
return 0;
diff --git a/gshadow/putsgent.c b/gshadow/putsgent.c
index 4e219c478a..70063d74c2 100644
--- a/gshadow/putsgent.c
+++ b/gshadow/putsgent.c
@@ -40,7 +40,7 @@ putsgent (const struct sgrp *g, FILE *stream)
return -1;
}
- _IO_flockfile (stream);
+ flockfile (stream);
if (fprintf (stream, "%s:%s:", g->sg_namp, _S (g->sg_passwd)) < 0)
++errors;
@@ -75,7 +75,7 @@ putsgent (const struct sgrp *g, FILE *stream)
if (putc_unlocked ('\n', stream) == EOF)
++errors;
- _IO_funlockfile (stream);
+ funlockfile (stream);
return errors ? -1 : 0;
}
diff --git a/include/bits/stdio.h b/include/bits/stdio.h
new file mode 100644
index 0000000000..4aebc9edf2
--- /dev/null
+++ b/include/bits/stdio.h
@@ -0,0 +1,9 @@
+#ifndef _BITS_STDIO_H
+# include <libio/bits/stdio.h>
+# ifndef _ISOMAC
+
+libc_hidden_proto (__uflow)
+libc_hidden_proto (__overflow)
+
+# endif
+#endif
diff --git a/include/bits/types/FILE_internals.h b/include/bits/types/FILE_internals.h
new file mode 100644
index 0000000000..a653c8101c
--- /dev/null
+++ b/include/bits/types/FILE_internals.h
@@ -0,0 +1 @@
+#include <libio/bits/types/FILE_internals.h>
diff --git a/include/bits/types/__fpos_t.h b/include/bits/types/__fpos_t.h
new file mode 100644
index 0000000000..2dcdc98d75
--- /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 0000000000..87f7930c6e
--- /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/libio.h b/include/libio.h
index d2fa796758..54ed704bdd 100644
--- a/include/libio.h
+++ b/include/libio.h
@@ -1,11 +1,9 @@
-#if !defined _ISOMAC && defined _IO_MTSAFE_IO
-# include <stdio-lock.h>
-#endif
-#include <libio/libio.h>
-
-#ifndef _ISOMAC
-#ifndef _LIBC_LIBIO_H
-#define _LIBC_LIBIO_H
+#ifndef _IO_STDIO_H
+# if !defined _ISOMAC && defined _IO_MTSAFE_IO
+# include <stdio-lock.h>
+# endif
+# include <libio/libio.h>
+# ifndef _ISOMAC
libc_hidden_proto (__overflow)
libc_hidden_proto (__underflow)
@@ -41,5 +39,5 @@ libc_hidden_proto (_IO_vfscanf)
# endif
#endif /* _IO_MTSAFE_IO */
-#endif
-#endif
+# endif /* !_ISOMAC */
+#endif /* libio.h */
diff --git a/include/stdio.h b/include/stdio.h
index 509447c528..cb31621d4c 100644
--- a/include/stdio.h
+++ b/include/stdio.h
@@ -1,4 +1,7 @@
#ifndef _STDIO_H
+# if !defined _ISOMAC && defined _IO_MTSAFE_IO
+# include <stdio-lock.h>
+# endif
# include <libio/stdio.h>
# ifndef _ISOMAC
@@ -10,44 +13,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,
+extern __ssize_t __getline (char **__lineptr, size_t *__n,
FILE *__stream);
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;
@@ -56,12 +59,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)
@@ -106,9 +109,15 @@ libc_hidden_proto (__fortify_fail_abort)
/* Acquire ownership of STREAM. */
extern void __flockfile (FILE *__stream);
+# if IS_IN (libc)
+# define flockfile(stream) __flockfile(stream)
+# endif
/* Relinquish the ownership granted for STREAM. */
extern void __funlockfile (FILE *__stream);
+# if IS_IN (libc)
+# define funlockfile(stream) __funlockfile(stream)
+# endif
/* Try to acquire ownership of STREAM but do not block if it is not
possible. */
@@ -127,18 +136,18 @@ extern int _sys_nerr_internal attribute_hidden;
libc_hidden_proto (__asprintf)
# if IS_IN (libc)
-extern _IO_FILE *_IO_new_fopen (const char*, const char*);
+extern FILE *_IO_new_fopen (const char*, const char*);
# define fopen(fname, mode) _IO_new_fopen (fname, mode)
-extern _IO_FILE *_IO_new_fdopen (int, const char*);
+extern FILE *_IO_new_fdopen (int, const char*);
# define fdopen(fd, mode) _IO_new_fdopen (fd, mode)
-extern int _IO_new_fclose (_IO_FILE*);
+extern int _IO_new_fclose (FILE*);
# define fclose(fp) _IO_new_fclose (fp)
-extern int _IO_fputs (const char*, _IO_FILE*);
+extern int _IO_fputs (const char*, FILE*);
libc_hidden_proto (_IO_fputs)
# define fputs(str, fp) _IO_fputs (str, fp)
-extern int _IO_new_fsetpos (_IO_FILE *, const _IO_fpos_t *);
+extern int _IO_new_fsetpos (FILE *, const __fpos_t *);
# define fsetpos(fp, posp) _IO_new_fsetpos (fp, posp)
-extern int _IO_new_fgetpos (_IO_FILE *, _IO_fpos_t *);
+extern int _IO_new_fgetpos (FILE *, __fpos_t *);
# define fgetpos(fp, posp) _IO_new_fgetpos (fp, posp)
# endif
diff --git a/include/stdio_ext.h b/include/stdio_ext.h
index 29c6e68cdb..7f8835211e 100644
--- a/include/stdio_ext.h
+++ b/include/stdio_ext.h
@@ -2,6 +2,7 @@
#include <stdio-common/stdio_ext.h>
# ifndef _ISOMAC
+# include <libio/bits/types/FILE_internals.h>
libc_hidden_proto (__fsetlocking)
diff --git a/libio/Makefile b/libio/Makefile
index 9d09bd8b6a..52ba5664a3 100644
--- a/libio/Makefile
+++ b/libio/Makefile
@@ -22,9 +22,10 @@ subdir := libio
include ../Makeconfig
-headers := stdio.h libio.h _G_config.h bits/stdio.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/libio-ldbl.h \
+ bits/types/FILE.h bits/types/__FILE.h bits/types/FILE_internals.h \
+ bits/types/cookie_io_functions_t.h bits/types/__fpos_t.h
routines := \
filedoalloc iofclose iofdopen iofflush iofgetpos iofgets iofopen \
diff --git a/libio/__fbufsize.c b/libio/__fbufsize.c
index 74d2ebbe81..8c00ca7658 100644
--- a/libio/__fbufsize.c
+++ b/libio/__fbufsize.c
@@ -16,6 +16,7 @@
<http://www.gnu.org/licenses/>. */
#include <stdio_ext.h>
+#include <libio.h>
size_t
__fbufsize (FILE *fp)
diff --git a/libio/__flbf.c b/libio/__flbf.c
index 929175df70..dfa68aa2e8 100644
--- a/libio/__flbf.c
+++ b/libio/__flbf.c
@@ -16,6 +16,7 @@
<http://www.gnu.org/licenses/>. */
#include <stdio_ext.h>
+#include <libio.h>
int
__flbf (FILE *fp)
diff --git a/libio/__fpending.c b/libio/__fpending.c
index e957839985..008cf08fb4 100644
--- a/libio/__fpending.c
+++ b/libio/__fpending.c
@@ -16,6 +16,7 @@
<http://www.gnu.org/licenses/>. */
#include <stdio_ext.h>
+#include <libio.h>
size_t
__fpending (FILE *fp)
diff --git a/libio/__freadable.c b/libio/__freadable.c
index 3bde42a729..d5535e902b 100644
--- a/libio/__freadable.c
+++ b/libio/__freadable.c
@@ -16,6 +16,7 @@
<http://www.gnu.org/licenses/>. */
#include <stdio_ext.h>
+#include <libio.h>
int
__freadable (FILE *fp)
diff --git a/libio/__freading.c b/libio/__freading.c
index f16f42679f..32e26f8a6c 100644
--- a/libio/__freading.c
+++ b/libio/__freading.c
@@ -16,6 +16,7 @@
<http://www.gnu.org/licenses/>. */
#include <stdio_ext.h>
+#include <libio.h>
int
__freading (FILE *fp)
diff --git a/libio/__fwritable.c b/libio/__fwritable.c
index 1584aec68f..328e0b6b5b 100644
--- a/libio/__fwritable.c
+++ b/libio/__fwritable.c
@@ -16,6 +16,7 @@
<http://www.gnu.org/licenses/>. */
#include <stdio_ext.h>
+#include <libio.h>
int
__fwritable (FILE *fp)
diff --git a/libio/__fwriting.c b/libio/__fwriting.c
index 1769d2107e..2ec8fba1cf 100644
--- a/libio/__fwriting.c
+++ b/libio/__fwriting.c
@@ -16,6 +16,7 @@
<http://www.gnu.org/licenses/>. */
#include <stdio_ext.h>
+#include <libio.h>
int
__fwriting (FILE *fp)
diff --git a/libio/bits/stdio.h b/libio/bits/stdio.h
index 21ad2fb20c..ad77b04a4f 100644
--- a/libio/bits/stdio.h
+++ b/libio/bits/stdio.h
@@ -16,24 +16,30 @@
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
+#include <bits/types/FILE_internals.h>
+
+extern int __uflow (FILE *);
+extern int __overflow (FILE *, int);
+
#ifndef __extern_inline
# define __STDIO_INLINE inline
#else
# define __STDIO_INLINE __extern_inline
#endif
-
-#ifdef __USE_EXTERN_INLINES
/* For -D_FORTIFY_SOURCE{,=2} bits/stdio2.h will define a different
inline. */
# 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);
}
@@ -43,8 +49,22 @@ vprintf (const char *__restrict __fmt, _G_va_list __arg)
__STDIO_INLINE int
getchar (void)
{
- return _IO_getc (stdin);
+ return getc (stdin);
+}
+
+#if defined __USE_MISC || defined __USE_POSIX
+__STDIO_INLINE int
+__getc_unlocked (FILE *__fp)
+{
+ char __c;
+
+ if (__glibc_unlikely (__fp->_IO_read_ptr >= __fp->_IO_read_end))
+ return __uflow (__fp);
+
+ __c = *__fp->_IO_read_ptr++;
+ return (unsigned char) __c;
}
+#endif
# ifdef __USE_MISC
@@ -52,24 +72,23 @@ getchar (void)
__STDIO_INLINE int
fgetc_unlocked (FILE *__fp)
{
- return _IO_getc_unlocked (__fp);
+ return __getc_unlocked (__fp);
}
# endif /* misc */
-
# ifdef __USE_POSIX
/* This is defined in POSIX.1:1996. */
__STDIO_INLINE int
getc_unlocked (FILE *__fp)
{
- return _IO_getc_unlocked (__fp);
+ return __getc_unlocked (__fp);
}
/* This is defined in POSIX.1:1996. */
__STDIO_INLINE int
getchar_unlocked (void)
{
- return _IO_getc_unlocked (stdin);
+ return __getc_unlocked (stdin);
}
# endif /* POSIX */
@@ -78,16 +97,28 @@ getchar_unlocked (void)
__STDIO_INLINE int
putchar (int __c)
{
- return _IO_putc (__c, stdout);
+ return putc (__c, stdout);
}
+#if defined __USE_MISC || defined __USE_POSIX
+__STDIO_INLINE int
+__putc_unlocked (int __c, FILE *__stream)
+{
+ unsigned char __cc = __c;
+ if (__glibc_unlikely (__stream->_IO_write_ptr >= __stream->_IO_write_end))
+ return __overflow (__stream, __cc);
+
+ *__stream->_IO_write_ptr++ = __cc;
+ return __cc;
+}
+#endif
# ifdef __USE_MISC
/* Faster version when locking is not necessary. */
__STDIO_INLINE int
fputc_unlocked (int __c, FILE *__stream)
{
- return _IO_putc_unlocked (__c, __stream);
+ return __putc_unlocked (__c, __stream);
}
# endif /* misc */
@@ -97,21 +128,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 (__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 (__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,20 +155,17 @@ getline (char **__lineptr, size_t *__n, FILE *__stream)
__STDIO_INLINE int
__NTH (feof_unlocked (FILE *__stream))
{
- return _IO_feof_unlocked (__stream);
+ return (__stream->_flags & _IO_EOF_SEEN) != 0;
}
/* Faster versions when locking is not required. */
__STDIO_INLINE int
__NTH (ferror_unlocked (FILE *__stream))
{
- return _IO_ferror_unlocked (__stream);
+ return (__stream->_flags & _IO_ERR_SEEN) != 0;
}
# endif /* misc */
-#endif /* Use extern inlines. */
-
-
#if defined __USE_MISC && defined __GNUC__ && defined __OPTIMIZE__ \
&& !defined __cplusplus
/* Perform some simple optimizations. */
@@ -151,7 +179,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 +202,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); }) \
@@ -186,5 +214,6 @@ __NTH (ferror_unlocked (FILE *__stream))
: fwrite_unlocked (ptr, size, n, stream))))
#endif
-/* Define helper macro. */
#undef __STDIO_INLINE
+
+#endif /* bits/stdio.h */
diff --git a/libio/bits/stdio2.h b/libio/bits/stdio2.h
index e9f9d6952b..2d5cb5c03d 100644
--- a/libio/bits/stdio2.h
+++ b/libio/bits/stdio2.h
@@ -24,7 +24,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 +41,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 +54,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 +72,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 +86,10 @@ 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 +112,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 +123,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 +132,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 +148,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 +160,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 +169,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 +206,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 +369,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;
diff --git a/libio/bits/types/FILE.h b/libio/bits/types/FILE.h
index f268263209..de02a9d75b 100644
--- a/libio/bits/types/FILE.h
+++ b/libio/bits/types/FILE.h
@@ -1,9 +1,12 @@
#ifndef __FILE_defined
#define __FILE_defined 1
-struct _IO_FILE;
+/* Note: the struct tag is _IO_FILE rather than __FILE for historical
+ reasons. It potentially appears in C++ mangled names and therefore
+ cannot be changed. This file must be kept in sync with __FILE.h and
+ FILE_internals.h. */
-/* The opaque type of streams. This is the definition used elsewhere. */
+struct _IO_FILE;
typedef struct _IO_FILE FILE;
#endif
diff --git a/libio/bits/types/FILE_internals.h b/libio/bits/types/FILE_internals.h
new file mode 100644
index 0000000000..5f88b4c6a1
--- /dev/null
+++ b/libio/bits/types/FILE_internals.h
@@ -0,0 +1,110 @@
+/* Internal structure of a FILE object.
+ Copyright (C) 1991-2017 Free Software Foundation, Inc.
+ This file is part of the GNU C Library.
+ Written by Per Bothner <bothner@cygnus.com>.
+
+ 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 _FILE_internals_defined
+#define _FILE_internals_defined 1
+
+/* This file exposes just enough of the internal structure of a FILE
+ object to permit the optimizations in bits/stdio.h.
+
+ Note: the _IO_ prefixes on struct tags and field names are for
+ historical reasons. The GNU C Library no longer supports the
+ "libio" extension to stdio.
+
+ This file must be kept in sync with __FILE.h, FILE.h, and internal
+ headers. */
+
+#include <bits/types.h>
+
+/* 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;
+#define _IO_lock_t_defined 1
+#endif
+
+struct _IO_marker;
+struct _IO_codecvt;
+struct _IO_wide_data;
+
+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;
+
+ /* Fields below this point are not present in the "old" FILE structure. */
+ __off64_t _offset;
+ 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)];
+};
+
+/* Many more flags are defined internally. */
+#ifndef _IO_EOF_SEEN
+# define _IO_EOF_SEEN 0x10
+#elif _IO_EOF_SEEN != 0x10
+# error "FILE_internals.h out of sync with libio.h (_IO_EOF_SEEN)"
+#endif
+
+#ifndef _IO_ERR_SEEN
+# define _IO_ERR_SEEN 0x20
+#elif _IO_ERR_SEEN != 0x20
+# error "FILE_internals.h out of sync with libio.h (_IO_ERR_SEEN)"
+#endif
+
+#ifndef _IO_USER_LOCK
+# define _IO_USER_LOCK 0x8000
+#elif _IO_USER_LOCK != 0x8000
+# error "FILE_internals.h out of sync with libio.h (_IO_USER_LOCK)"
+#endif
+
+#endif
diff --git a/libio/bits/types/__FILE.h b/libio/bits/types/__FILE.h
index 06dd79bc83..5e8a9096f0 100644
--- a/libio/bits/types/__FILE.h
+++ b/libio/bits/types/__FILE.h
@@ -1,6 +1,11 @@
#ifndef ____FILE_defined
#define ____FILE_defined 1
+/* Note: the struct tag is _IO_FILE rather than __FILE for historical
+ reasons. It potentially appears in C++ mangled names and therefore
+ cannot be changed. This file must be kept in sync with FILE.h and
+ FILE_internals.h. */
+
struct _IO_FILE;
typedef struct _IO_FILE __FILE;
diff --git a/libio/bits/types/__fpos_t.h b/libio/bits/types/__fpos_t.h
new file mode 100644
index 0000000000..032a8f12ba
--- /dev/null
+++ b/libio/bits/types/__fpos_t.h
@@ -0,0 +1,19 @@
+#ifndef __fpos_t_defined
+#define __fpos_t_defined 1
+
+#include <bits/types.h>
+#include <bits/types/__mbstate_t.h>
+
+typedef struct
+{
+ __off_t __pos;
+ __mbstate_t __state;
+} __fpos_t;
+
+typedef struct
+{
+ __off64_t __pos;
+ __mbstate_t __state;
+} __fpos64_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 0000000000..c29a46e019
--- /dev/null
+++ b/libio/bits/types/cookie_io_functions_t.h
@@ -0,0 +1,61 @@
+/* Types for fopencookie.
+ Copyright (C) 1991-2017 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>
+
+#define __need_size_t
+#include <stddef.h>
+
+/* 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 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 cookie_write_function_t (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 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. */
+typedef struct
+{
+ 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 /* cookie_io_functions_t.h */
diff --git a/libio/libio.h b/libio/libio.h
index 14bcb92332..05cfa4a581 100644
--- a/libio/libio.h
+++ b/libio/libio.h
@@ -28,10 +28,54 @@
#ifndef _IO_STDIO_H
#define _IO_STDIO_H
+#include <features.h>
+
+#if !defined _LIBC || !defined __USE_GNU || defined _ISOMAC
+# error "libio.h is private to the stdio implementation"
+#endif
+
+/* Former configuration parameters for standalone libio. Most of
+ these are fixed for the GNU C library. */
+
+#include <bits/types.h>
+
+#define __need_size_t
+#define __need_wchar_t
+#define __need_NULL
+#include <stddef.h>
+
+#define __need___va_list
+#include <stdarg.h>
+
+#include <bits/types/__mbstate_t.h>
+#include <bits/types/__fpos_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;
+} _G_iconv_t;
+
+#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)
+
+/* This must match the definition of BUFSIZ in stdio.h. */
+#define _G_BUFSIZ 8192
+
+/* Allow ports to override the above if absolutely necessary. */
#include <_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
@@ -41,38 +85,17 @@
#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_va_list __gnuc_va_list
#define _IO_wint_t wint_t
-/* 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*/
-
+/* Backward compatibility */
+#define _STDIO_USES_IOSTREAM 1
#define _IO_UNIFIED_JUMPTABLES 1
+#define __HAVE_COLUMN 1
#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
#define _IOS_INPUT 1
#define _IOS_OUTPUT 2
@@ -111,16 +134,12 @@
#define _IO_FLAGS2_MMAP 1
#define _IO_FLAGS2_NOTCANCEL 2
-#ifdef _LIBC
-# define _IO_FLAGS2_FORTIFY 4
-#endif
+#define _IO_FLAGS2_FORTIFY 4
#define _IO_FLAGS2_USER_WBUF 8
-#ifdef _LIBC
-# define _IO_FLAGS2_SCANF_STD 16
-# define _IO_FLAGS2_NOCLOSE 32
-# define _IO_FLAGS2_CLOEXEC 64
-# define _IO_FLAGS2_NEED_LOCK 128
-#endif
+#define _IO_FLAGS2_SCANF_STD 16
+#define _IO_FLAGS2_NOCLOSE 32
+#define _IO_FLAGS2_CLOEXEC 64
+#define _IO_FLAGS2_NEED_LOCK 128
/* These are "formatting flags" matching the iostream fmtflags enum values. */
#define _IO_SKIPWS 01
@@ -142,34 +161,67 @@
#define _IO_BOOLALPHA 0200000
-struct _IO_jump_t; struct _IO_FILE;
+struct _IO_jump_t;
+struct _IO_FILE;
+struct _IO_FILE_plus;
+typedef struct _IO_FILE _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
+#include <bits/types/__FILE.h>
+#include <bits/types/FILE.h>
+#include <bits/types/FILE_internals.h>
+#define _IO_file_flags _flags /* Compatibility. */
+#ifdef _IO_USE_OLD_IO_FILE
+/* This structure is a proper prefix of the _IO_FILE structure defined
+ in FILE_internals.h. */
+struct _IO_FILE_old
+{
+ int _flags; /* High-order word is _IO_MAGIC; rest is 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;
+ int _flags2;
+ _IO_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];
+
+ /* char* _save_gptr; char* _save_egptr; */
+
+ _IO_lock_t *_lock;
+};
+#endif
/* A streammarker remembers a position in a buffer. */
-struct _IO_marker {
+struct _IO_marker
+{
struct _IO_marker *_next;
struct _IO_FILE *_sbuf;
/* If _pos >= 0
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. */
@@ -181,7 +233,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
@@ -236,166 +287,40 @@ struct _IO_wide_data
const struct _IO_jump_t *_wide_vtable;
};
-#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;
-#endif
-
-struct _IO_FILE_plus;
extern struct _IO_FILE_plus _IO_2_1_stdin_;
extern struct _IO_FILE_plus _IO_2_1_stdout_;
extern struct _IO_FILE_plus _IO_2_1_stderr_;
-#ifndef _LIBC
-#define _IO_stdin ((_IO_FILE*)(&_IO_2_1_stdin_))
-#define _IO_stdout ((_IO_FILE*)(&_IO_2_1_stdout_))
-#define _IO_stderr ((_IO_FILE*)(&_IO_2_1_stderr_))
-#else
extern _IO_FILE *_IO_stdin attribute_hidden;
extern _IO_FILE *_IO_stdout attribute_hidden;
extern _IO_FILE *_IO_stderr attribute_hidden;
-#endif
-
/* Functions to do I/O and file management for a stream. */
+#include <bits/types/cookie_io_functions_t.h>
-/* 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);
-
-
-#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;
+/* Legacy internal names for cookie I/O types. */
+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;
/* Initialize one of those. */
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 *);
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 *);
extern _IO_wint_t __woverflow (_IO_FILE *, _IO_wint_t);
-#endif
-#if __GNUC__ >= 3
-# define _IO_BE(expr, res) __builtin_expect ((expr), res)
-#else
-# define _IO_BE(expr, res) (expr)
-#endif
+#define _IO_BE(expr, res) __builtin_expect ((expr), res)
#define _IO_getc_unlocked(_fp) \
(_IO_BE ((_fp)->_IO_read_ptr >= (_fp)->_IO_read_end, 0) \
@@ -409,7 +334,6 @@ extern _IO_wint_t __woverflow (_IO_FILE *, _IO_wint_t);
? __overflow (_fp, (unsigned char) (_ch)) \
: (unsigned char) (*(_fp)->_IO_write_ptr++ = (_ch)))
-#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 \
@@ -421,7 +345,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) (((__fp)->_flags & _IO_EOF_SEEN) != 0)
#define _IO_ferror_unlocked(__fp) (((__fp)->_flags & _IO_ERR_SEEN) != 0)
@@ -467,28 +390,28 @@ 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 defined SHARED
+# include <shlib-compat.h>
+# 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
+# endif
+#endif
+#ifndef _IO_fwide_maybe_incompatible
+# 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) \
{ \
@@ -502,7 +425,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);
@@ -510,14 +432,9 @@ 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>
#endif
-#ifdef __cplusplus
-}
-#endif
-
#endif /* _IO_STDIO_H */
diff --git a/libio/libioP.h b/libio/libioP.h
index 1832b44cc7..f41edf4556 100644
--- a/libio/libioP.h
+++ b/libio/libioP.h
@@ -347,12 +347,9 @@ struct _IO_FILE_plus
};
#ifdef _IO_USE_OLD_IO_FILE
-/* This structure is used by the compatibility code as if it were an
- _IO_FILE_plus, but has enough space to initialize the _mode argument
- of an _IO_FILE_complete. */
-struct _IO_FILE_complete_plus
+struct _IO_FILE_old_plus
{
- struct _IO_FILE_complete file;
+ struct _IO_FILE_old file;
const struct _IO_jump_t *vtable;
};
#endif
@@ -625,13 +622,15 @@ extern _IO_off64_t _IO_new_file_seekoff (_IO_FILE *, _IO_off64_t, int, int);
extern _IO_ssize_t _IO_new_file_write (_IO_FILE *, const void *, _IO_ssize_t);
extern _IO_size_t _IO_new_file_xsputn (_IO_FILE *, const void *, _IO_size_t);
+#ifdef _IO_USE_OLD_IO_FILE
+extern void _IO_old_file_init_internal (struct _IO_FILE_old_plus *)
+ __THROW attribute_hidden;
+#endif
extern _IO_FILE* _IO_old_file_setbuf (_IO_FILE *, char *, _IO_ssize_t);
extern _IO_off64_t _IO_old_file_seekoff (_IO_FILE *, _IO_off64_t, int, int);
extern _IO_size_t _IO_old_file_xsputn (_IO_FILE *, const void *, _IO_size_t);
extern int _IO_old_file_underflow (_IO_FILE *);
extern int _IO_old_file_overflow (_IO_FILE *, int);
-extern void _IO_old_file_init_internal (struct _IO_FILE_plus *)
- __THROW attribute_hidden;
extern _IO_FILE* _IO_old_file_attach (_IO_FILE *, int);
extern _IO_FILE* _IO_old_file_fopen (_IO_FILE *, const char *, const char *);
extern _IO_ssize_t _IO_old_file_write (_IO_FILE *, const void *, _IO_ssize_t);
diff --git a/libio/oldfileops.c b/libio/oldfileops.c
index 2eceefa68a..db112c88f6 100644
--- a/libio/oldfileops.c
+++ b/libio/oldfileops.c
@@ -114,7 +114,7 @@ extern int errno;
void
attribute_compat_text_section
-_IO_old_file_init_internal (struct _IO_FILE_plus *fp)
+_IO_old_file_init_internal (struct _IO_FILE_old_plus *fp)
{
/* POSIX.1 allows another file handle to be used to change the position
of our file descriptor. Hence we actually don't know the actual
@@ -122,25 +122,25 @@ _IO_old_file_init_internal (struct _IO_FILE_plus *fp)
fp->file._old_offset = _IO_pos_BAD;
fp->file._IO_file_flags |= CLOSED_FILEBUF_FLAGS;
- _IO_link_in (fp);
- fp->file._vtable_offset = ((int) sizeof (struct _IO_FILE)
- - (int) sizeof (struct _IO_FILE_complete));
+ _IO_link_in ((struct _IO_FILE_plus *)fp);
+ fp->file._vtable_offset = ((int) sizeof (struct _IO_FILE_old)
+ - (int) sizeof (struct _IO_FILE));
fp->file._fileno = -1;
#if defined SHARED && defined _LIBC
if (__builtin_expect (&_IO_stdin_used != NULL, 1)
- || (fp != (struct _IO_FILE_plus *) _IO_stdin
- && fp != (struct _IO_FILE_plus *) _IO_stdout
- && fp != (struct _IO_FILE_plus *) _IO_stderr))
+ || (fp != (struct _IO_FILE_old_plus *) _IO_stdin
+ && fp != (struct _IO_FILE_old_plus *) _IO_stdout
+ && fp != (struct _IO_FILE_old_plus *) _IO_stderr))
/* The object is dynamically allocated and large enough. Initialize
the _mode element as well. */
- ((struct _IO_FILE_complete *) fp)->_mode = -1;
+ ((struct _IO_FILE *) fp)->_mode = -1;
#endif
}
void
attribute_compat_text_section
-_IO_old_file_init (struct _IO_FILE_plus *fp)
+_IO_old_file_init (struct _IO_FILE_old_plus *fp)
{
IO_set_accept_foreign_vtables (&_IO_vtable_check);
_IO_old_file_init_internal (fp);
@@ -189,7 +189,8 @@ _IO_old_file_finish (_IO_FILE *fp, int dummy)
_IO_FILE *
attribute_compat_text_section
-_IO_old_file_fopen (_IO_FILE *fp, const char *filename, const char *mode)
+_IO_old_file_fopen (_IO_FILE *fp,
+ const char *filename, const char *mode)
{
int oflags = 0, omode;
int read_write, fdesc;
diff --git a/libio/oldiofdopen.c b/libio/oldiofdopen.c
index 7f6180767e..166c78933f 100644
--- a/libio/oldiofdopen.c
+++ b/libio/oldiofdopen.c
@@ -44,7 +44,7 @@ _IO_old_fdopen (int fd, const char *mode)
int posix_mode = 0;
struct locked_FILE
{
- struct _IO_FILE_complete_plus fp;
+ struct _IO_FILE_plus fp;
#ifdef _IO_MTSAFE_IO
_IO_lock_t lock;
#endif
@@ -108,23 +108,23 @@ _IO_old_fdopen (int fd, const char *mode)
if (new_f == NULL)
return NULL;
#ifdef _IO_MTSAFE_IO
- new_f->fp.file._file._lock = &new_f->lock;
+ new_f->fp.file._lock = &new_f->lock;
#endif
- _IO_old_init (&new_f->fp.file._file, 0);
+ _IO_old_init (&new_f->fp.file, 0);
_IO_JUMPS_FILE_plus (&new_f->fp) = &_IO_old_file_jumps;
- _IO_old_file_init_internal ((struct _IO_FILE_plus *) &new_f->fp);
+ _IO_old_file_init_internal ((struct _IO_FILE_old_plus *) &new_f->fp);
#if !_IO_UNIFIED_JUMPTABLES
new_f->fp.vtable = NULL;
#endif
- if (_IO_old_file_attach (&new_f->fp.file._file, fd) == NULL)
+ if (_IO_old_file_attach (&new_f->fp.file, fd) == NULL)
{
- _IO_un_link ((struct _IO_FILE_plus *) &new_f->fp);
+ _IO_un_link (&new_f->fp);
free (new_f);
return NULL;
}
- new_f->fp.file._file._flags &= ~_IO_DELETE_DONT_CLOSE;
+ new_f->fp.file._flags &= ~_IO_DELETE_DONT_CLOSE;
- _IO_mask_flags (&new_f->fp.file._file, read_write,
+ _IO_mask_flags (&new_f->fp.file, read_write,
_IO_NO_READS+_IO_NO_WRITES+_IO_IS_APPENDING);
return (_IO_FILE *) &new_f->fp;
diff --git a/libio/oldiofopen.c b/libio/oldiofopen.c
index 085267b1d3..f9b336dd25 100644
--- a/libio/oldiofopen.c
+++ b/libio/oldiofopen.c
@@ -38,7 +38,7 @@ _IO_old_fopen (const char *filename, const char *mode)
{
struct locked_FILE
{
- struct _IO_FILE_complete_plus fp;
+ struct _IO_FILE_plus fp;
#ifdef _IO_MTSAFE_IO
_IO_lock_t lock;
#endif
@@ -47,17 +47,17 @@ _IO_old_fopen (const char *filename, const char *mode)
if (new_f == NULL)
return NULL;
#ifdef _IO_MTSAFE_IO
- new_f->fp.file._file._lock = &new_f->lock;
+ new_f->fp.file._lock = &new_f->lock;
#endif
- _IO_old_init (&new_f->fp.file._file, 0);
+ _IO_old_init (&new_f->fp.file, 0);
_IO_JUMPS_FILE_plus (&new_f->fp) = &_IO_old_file_jumps;
- _IO_old_file_init_internal ((struct _IO_FILE_plus *) &new_f->fp);
+ _IO_old_file_init_internal ((struct _IO_FILE_old_plus *) &new_f->fp);
#if !_IO_UNIFIED_JUMPTABLES
new_f->fp.vtable = NULL;
#endif
if (_IO_old_file_fopen ((_IO_FILE *) &new_f->fp, filename, mode) != NULL)
return (_IO_FILE *) &new_f->fp;
- _IO_un_link ((struct _IO_FILE_plus *) &new_f->fp);
+ _IO_un_link (&new_f->fp);
free (new_f);
return NULL;
}
diff --git a/libio/oldiopopen.c b/libio/oldiopopen.c
index af7774ae90..3aa0447a76 100644
--- a/libio/oldiopopen.c
+++ b/libio/oldiopopen.c
@@ -94,7 +94,7 @@ extern int _IO_dup2 (int fd, int fd2) __THROW;
struct _IO_proc_file
{
- struct _IO_FILE_complete_plus file;
+ struct _IO_FILE_plus file;
/* Following fields must match those in class procbuf (procbuf.h) */
_IO_pid_t pid;
struct _IO_proc_file *next;
@@ -206,18 +206,18 @@ _IO_old_popen (const char *command, const char *mode)
if (new_f == NULL)
return NULL;
#ifdef _IO_MTSAFE_IO
- new_f->fpx.file.file._file._lock = &new_f->lock;
+ new_f->fpx.file.file._lock = &new_f->lock;
#endif
- fp = &new_f->fpx.file.file._file;
+ fp = &new_f->fpx.file.file;
_IO_old_init (fp, 0);
- _IO_JUMPS_FILE_plus (&new_f->fpx.file) = &_IO_old_proc_jumps;
- _IO_old_file_init_internal ((struct _IO_FILE_plus *) &new_f->fpx.file);
+ _IO_JUMPS_FILE_plus (&new_f->fpx.file.file) = &_IO_old_proc_jumps;
+ _IO_old_file_init_internal ((struct _IO_FILE_old_plus *) &new_f->fpx.file);
#if !_IO_UNIFIED_JUMPTABLES
new_f->fpx.file.vtable = NULL;
#endif
if (_IO_old_proc_open (fp, command, mode) != NULL)
return fp;
- _IO_un_link ((struct _IO_FILE_plus *) &new_f->fpx.file);
+ _IO_un_link (&new_f->fpx.file);
free (new_f);
return NULL;
}
diff --git a/libio/oldstdfiles.c b/libio/oldstdfiles.c
index bed7bceca2..1ce99ef12f 100644
--- a/libio/oldstdfiles.c
+++ b/libio/oldstdfiles.c
@@ -39,11 +39,11 @@
#ifdef _IO_MTSAFE_IO
#define DEF_STDFILE(NAME, FD, CHAIN, FLAGS) \
static _IO_lock_t _IO_stdfile_##FD##_lock = _IO_lock_initializer; \
- struct _IO_FILE_plus NAME \
+ struct _IO_FILE_old_plus NAME \
= {FILEBUF_LITERAL(CHAIN, FLAGS, FD, NULL), &_IO_old_file_jumps};
#else
#define DEF_STDFILE(NAME, FD, CHAIN, FLAGS) \
- struct _IO_FILE_plus NAME \
+ struct _IO_FILE_old_plus NAME \
= {FILEBUF_LITERAL(CHAIN, FLAGS, FD, NULL), &_IO_old_file_jumps};
#endif
@@ -81,12 +81,12 @@ _IO_check_libio (void)
_IO_stdin = stdin = (_IO_FILE *) &_IO_stdin_;
_IO_stdout = stdout = (_IO_FILE *) &_IO_stdout_;
_IO_stderr = stderr = (_IO_FILE *) &_IO_stderr_;
- _IO_list_all = &_IO_stderr_;
+ _IO_list_all = (struct _IO_FILE_plus *) &_IO_stderr_;
_IO_stdin->_vtable_offset = _IO_stdout->_vtable_offset =
_IO_stderr->_vtable_offset = stdin->_vtable_offset =
stdout->_vtable_offset = stderr->_vtable_offset =
- ((int) sizeof (struct _IO_FILE)
- - (int) sizeof (struct _IO_FILE_complete));
+ ((int) sizeof (struct _IO_FILE_old)
+ - (int) sizeof (struct _IO_FILE));
}
}
diff --git a/libio/stdio.h b/libio/stdio.h
index 47490c8299..7019c1d28f 100644
--- a/libio/stdio.h
+++ b/libio/stdio.h
@@ -32,18 +32,22 @@ __BEGIN_DECLS
#define __need_NULL
#include <stddef.h>
+#define __need___va_list
+#include <stdarg.h>
+
#include <bits/types.h>
#include <bits/types/__FILE.h>
#include <bits/types/FILE.h>
+#include <bits/types/__fpos_t.h>
-#define _STDIO_USES_IOSTREAM
-
-#include <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 +79,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'. */
@@ -91,7 +95,7 @@ typedef _G_fpos64_t fpos64_t;
/* Default buffer size. */
#ifndef BUFSIZ
-# define BUFSIZ _IO_BUFSIZ
+# define BUFSIZ 8192
#endif
@@ -132,9 +136,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 +274,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 +329,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 +346,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 +354,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 +367,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 +422,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 +446,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
@@ -483,10 +487,6 @@ extern int getc (FILE *__stream);
marked with __THROW. */
extern int getchar (void);
-/* The C standard explicitly says this is a macro, so we always do the
- optimization for it. */
-#define getc(_fp) _IO_getc (_fp)
-
#ifdef __USE_POSIX199506
/* These are defined in POSIX.1:1996.
@@ -523,10 +523,6 @@ extern int putc (int __c, FILE *__stream);
marked with __THROW. */
extern int putchar (int __c);
-/* The C standard explicitly says this can be a macro,
- so we always do the optimization for it. */
-#define putc(_ch, _fp) _IO_putc (_ch, _fp)
-
#ifdef __USE_MISC
/* Faster version when locking is not necessary.
@@ -600,12 +596,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,
+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.
@@ -613,9 +609,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
@@ -828,7 +824,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. */
diff --git a/malloc/malloc.c b/malloc/malloc.c
index e3ff778113..eb2cf3a081 100644
--- a/malloc/malloc.c
+++ b/malloc/malloc.c
@@ -222,6 +222,7 @@
#include <unistd.h>
#include <stdio.h> /* needed for malloc_stats */
+#include <libio.h> /* needed for FILE internals in malloc_stats */
#include <errno.h>
#include <shlib-compat.h>
diff --git a/misc/err.c b/misc/err.c
index 3da4e9d6b0..7b4b7ef814 100644
--- a/misc/err.c
+++ b/misc/err.c
@@ -22,10 +22,8 @@
#include <errno.h>
#include <string.h>
#include <stdio.h>
-
+#include <libio.h>
#include <wchar.h>
-#define flockfile(s) _IO_flockfile (s)
-#define funlockfile(s) _IO_funlockfile (s)
extern char *__progname;
diff --git a/misc/getpass.c b/misc/getpass.c
index 89c783fe20..9d84a7f9cd 100644
--- a/misc/getpass.c
+++ b/misc/getpass.c
@@ -22,8 +22,6 @@
#include <unistd.h>
#include <wchar.h>
-#define flockfile(s) _IO_flockfile (s)
-#define funlockfile(s) _IO_funlockfile (s)
#include <libc-lock.h>
/* It is desirable to use this bit on systems that have it.
diff --git a/misc/getttyent.c b/misc/getttyent.c
index 73002f52d1..64a93e9003 100644
--- a/misc/getttyent.c
+++ b/misc/getttyent.c
@@ -37,9 +37,6 @@ static char sccsid[] = "@(#)getttyent.c 8.1 (Berkeley) 6/4/93";
#include <ctype.h>
#include <string.h>
-#define flockfile(s) _IO_flockfile (s)
-#define funlockfile(s) _IO_funlockfile (s)
-
static char zapchar;
static FILE *tf;
diff --git a/misc/mntent_r.c b/misc/mntent_r.c
index 30f55212be..02319d152b 100644
--- a/misc/mntent_r.c
+++ b/misc/mntent_r.c
@@ -23,9 +23,6 @@
#include <string.h>
#include <sys/types.h>
-#define flockfile(s) _IO_flockfile (s)
-#define funlockfile(s) _IO_funlockfile (s)
-
#undef __setmntent
#undef __endmntent
#undef __getmntent_r
diff --git a/posix/getopt.c b/posix/getopt.c
index 543c8e7284..2efdea85dd 100644
--- a/posix/getopt.c
+++ b/posix/getopt.c
@@ -29,17 +29,13 @@
#include <unistd.h>
#ifdef _LIBC
-/* When used as part of glibc, error printing must be done differently
- for standards compliance. getopt is not a cancellation point, so
- it must not call functions that are, and it is specified by an
- older standard than stdio locking, so it must not refer to
- functions in the "user namespace" related to stdio locking.
- Finally, it must use glibc's internal message translation so that
- the messages are looked up in the proper text domain. */
+/* When used as part of glibc, error printing must be done
+ differently: getopt is not a cancellation point, so it must not
+ call functions that are, and it must use glibc's internal message
+ translation so that the messages are looked up in the proper text
+ domain. */
# include <libintl.h>
# define fprintf __fxprintf_nocancel
-# define flockfile(fp) _IO_flockfile (fp)
-# define funlockfile(fp) _IO_funlockfile (fp)
#else
# include "gettext.h"
# define _(msgid) gettext (msgid)
diff --git a/pwd/fgetpwent_r.c b/pwd/fgetpwent_r.c
index 8aa8f69372..044f19b20b 100644
--- a/pwd/fgetpwent_r.c
+++ b/pwd/fgetpwent_r.c
@@ -20,9 +20,6 @@
#include <stdio.h>
#include <pwd.h>
-#define flockfile(s) _IO_flockfile (s)
-#define funlockfile(s) _IO_funlockfile (s)
-
/* Define a line parsing function using the common code
used in the nss_files module. */
diff --git a/shadow/fgetspent_r.c b/shadow/fgetspent_r.c
index 42106302c1..260f59bbc5 100644
--- a/shadow/fgetspent_r.c
+++ b/shadow/fgetspent_r.c
@@ -20,8 +20,6 @@
#include <shadow.h>
#include <stdio.h>
-#define flockfile(s) _IO_flockfile (s)
-#define funlockfile(s) _IO_funlockfile (s)
/* Define a line parsing function using the common code
used in the nss_files module. */
diff --git a/shadow/putspent.c b/shadow/putspent.c
index 5e27340b5d..6dad45f401 100644
--- a/shadow/putspent.c
+++ b/shadow/putspent.c
@@ -20,8 +20,6 @@
#include <stdio.h>
#include <shadow.h>
-#define flockfile(s) _IO_flockfile (s)
-#define funlockfile(s) _IO_funlockfile (s)
#define _S(x) x ? x : ""
diff --git a/stdio-common/tstgetln.c b/stdio-common/tstgetln.c
index 79ab90c7cc..3b7ecefc0a 100644
--- a/stdio-common/tstgetln.c
+++ b/stdio-common/tstgetln.c
@@ -15,9 +15,8 @@
License along with the GNU C Library; if not, see
<http://www.gnu.org/licenses/>. */
+#include <sys/types.h>
#include <stdio.h>
-#undef ssize_t
-#define ssize_t _IO_ssize_t
int
main (int argc, char *argv[])
diff --git a/sysdeps/generic/_G_config.h b/sysdeps/generic/_G_config.h
index c49eed395b..d98cb3824d 100644
--- a/sysdeps/generic/_G_config.h
+++ b/sysdeps/generic/_G_config.h
@@ -1,58 +1,8 @@
-/* This file is needed by libio to define various configuration parameters.
- These are always the same in the GNU C library. */
+/* Configuration parameter overrides for libio - generic version. */
#ifndef _G_config_h
#define _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>
-#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
-{
- 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
+#undef _G_HAVE_MREMAP
#endif /* _G_config.h */
diff --git a/sysdeps/ieee754/ldbl-opt/Makefile b/sysdeps/ieee754/ldbl-opt/Makefile
index 81429d0ddd..15a217ec75 100644
--- a/sysdeps/ieee754/ldbl-opt/Makefile
+++ b/sysdeps/ieee754/ldbl-opt/Makefile
@@ -11,7 +11,7 @@ libm-routines += s_nexttowardfd
routines += math_ldbl_opt nldbl-compat
extra-libs += libnldbl
-libnldbl-calls = asprintf dprintf fprintf fscanf fwprintf fwscanf iovfscanf \
+libnldbl-calls = asprintf dprintf fprintf fscanf fwprintf fwscanf \
obstack_printf obstack_vprintf printf scanf snprintf \
sprintf sscanf swprintf swscanf vasprintf vdprintf vfprintf \
vfscanf vfwprintf vfwscanf vprintf vscanf vsnprintf \
diff --git a/sysdeps/ieee754/ldbl-opt/nldbl-compat.c b/sysdeps/ieee754/ldbl-opt/nldbl-compat.c
index e11d6d1bd0..4c4e429eb2 100644
--- a/sysdeps/ieee754/ldbl-opt/nldbl-compat.c
+++ b/sysdeps/ieee754/ldbl-opt/nldbl-compat.c
@@ -176,7 +176,7 @@ strong_alias (__nldbl_vfprintf, __nldbl__IO_vfprintf)
int
attribute_compat_text_section
-__nldbl__IO_vsprintf (char *string, const char *fmt, va_list ap)
+__nldbl_vsprintf (char *string, const char *fmt, va_list ap)
{
int done;
__no_long_double = 1;
@@ -184,8 +184,8 @@ __nldbl__IO_vsprintf (char *string, const char *fmt, va_list ap)
__no_long_double = 0;
return done;
}
-weak_alias (__nldbl__IO_vsprintf, __nldbl_vsprintf)
libc_hidden_def (__nldbl_vsprintf)
+strong_alias (__nldbl_vsprintf, __nldbl__IO_vsprintf)
int
attribute_compat_text_section
diff --git a/sysdeps/ieee754/ldbl-opt/nldbl-compat.h b/sysdeps/ieee754/ldbl-opt/nldbl-compat.h
index 72ec0db390..790be2a837 100644
--- a/sysdeps/ieee754/ldbl-opt/nldbl-compat.h
+++ b/sysdeps/ieee754/ldbl-opt/nldbl-compat.h
@@ -36,7 +36,6 @@
/* Declare the __nldbl_NAME function the wrappers call that's in libc.so. */
#define NLDBL_DECL(name) extern __typeof (name) __nldbl_##name
-NLDBL_DECL (_IO_vfscanf);
NLDBL_DECL (vfscanf);
NLDBL_DECL (vfwscanf);
NLDBL_DECL (obstack_vprintf);
@@ -82,22 +81,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/ieee754/ldbl-opt/nldbl-fscanf.c b/sysdeps/ieee754/ldbl-opt/nldbl-fscanf.c
index 1b768e306f..1f78f0d2dc 100644
--- a/sysdeps/ieee754/ldbl-opt/nldbl-fscanf.c
+++ b/sysdeps/ieee754/ldbl-opt/nldbl-fscanf.c
@@ -8,7 +8,7 @@ fscanf (FILE *stream, const char *fmt, ...)
int done;
va_start (arg, fmt);
- done = __nldbl__IO_vfscanf (stream, fmt, arg, NULL);
+ done = __nldbl_vfscanf (stream, fmt, arg);
va_end (arg);
return done;
diff --git a/sysdeps/ieee754/ldbl-opt/nldbl-iovfscanf.c b/sysdeps/ieee754/ldbl-opt/nldbl-iovfscanf.c
deleted file mode 100644
index 05581c0354..0000000000
--- a/sysdeps/ieee754/ldbl-opt/nldbl-iovfscanf.c
+++ /dev/null
@@ -1,8 +0,0 @@
-#include "nldbl-compat.h"
-
-int
-attribute_hidden
-_IO_vfscanf (FILE *s, const char *fmt, _IO_va_list ap, int *errp)
-{
- return __nldbl__IO_vfscanf (s, fmt, ap, errp);
-}
diff --git a/sysdeps/ieee754/ldbl-opt/nldbl-scanf.c b/sysdeps/ieee754/ldbl-opt/nldbl-scanf.c
index bbab371cbe..d4111c87d4 100644
--- a/sysdeps/ieee754/ldbl-opt/nldbl-scanf.c
+++ b/sysdeps/ieee754/ldbl-opt/nldbl-scanf.c
@@ -8,7 +8,7 @@ scanf (const char *fmt, ...)
int done;
va_start (arg, fmt);
- done = __nldbl__IO_vfscanf (stdin, fmt, arg, NULL);
+ done = __nldbl_vfscanf (stdin, fmt, arg);
va_end (arg);
return done;
diff --git a/sysdeps/ieee754/ldbl-opt/nldbl-vfscanf.c b/sysdeps/ieee754/ldbl-opt/nldbl-vfscanf.c
index f23465ee95..e10ce137fb 100644
--- a/sysdeps/ieee754/ldbl-opt/nldbl-vfscanf.c
+++ b/sysdeps/ieee754/ldbl-opt/nldbl-vfscanf.c
@@ -4,7 +4,7 @@ int
attribute_hidden
__vfscanf (FILE *s, const char *fmt, va_list ap)
{
- return __nldbl__IO_vfscanf (s, fmt, ap, NULL);
+ return __nldbl_vfscanf (s, fmt, ap);
}
extern __typeof (__vfscanf) vfscanf attribute_hidden;
weak_alias (__vfscanf, vfscanf)
diff --git a/sysdeps/ieee754/ldbl-opt/nldbl-vscanf.c b/sysdeps/ieee754/ldbl-opt/nldbl-vscanf.c
index e75907b905..71aa080405 100644
--- a/sysdeps/ieee754/ldbl-opt/nldbl-vscanf.c
+++ b/sysdeps/ieee754/ldbl-opt/nldbl-vscanf.c
@@ -5,5 +5,5 @@ attribute_hidden
weak_function
vscanf (const char *fmt, va_list ap)
{
- return __nldbl__IO_vfscanf (stdin, fmt, ap, NULL);
+ return __nldbl_vfscanf (stdin, fmt, ap);
}
diff --git a/sysdeps/unix/sysv/linux/_G_config.h b/sysdeps/unix/sysv/linux/_G_config.h
index 3bc6cfd595..69d5f4694f 100644
--- a/sysdeps/unix/sysv/linux/_G_config.h
+++ b/sysdeps/unix/sysv/linux/_G_config.h
@@ -1,59 +1,8 @@
-/* This file is needed by libio to define various configuration parameters.
- These are always the same in the GNU C library. */
+/* Configuration parameter overrides for libio - Linux version. */
#ifndef _G_config_h
#define _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>
-#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
-{
- 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 /* _G_config.h */