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