diff options
| -rw-r--r-- | ChangeLog | 65 | ||||
| -rw-r--r-- | NEWS | 4 | ||||
| -rw-r--r-- | bits/_G_config.h | 20 | ||||
| -rw-r--r-- | conform/data/stdio.h-data | 2 | ||||
| -rw-r--r-- | include/bits/types/__fpos64_t.h | 1 | ||||
| -rw-r--r-- | include/bits/types/__fpos_t.h | 1 | ||||
| -rw-r--r-- | include/bits/types/cookie_io_functions_t.h | 1 | ||||
| -rw-r--r-- | include/bits/types/struct_FILE.h | 1 | ||||
| -rw-r--r-- | include/stdio.h | 5 | ||||
| -rw-r--r-- | libio/Makefile | 9 | ||||
| -rw-r--r-- | libio/_G_config.h | 25 | ||||
| -rw-r--r-- | libio/bits/libio.h | 194 | ||||
| -rw-r--r-- | libio/bits/stdio.h | 29 | ||||
| -rw-r--r-- | libio/bits/stdio2.h | 35 | ||||
| -rw-r--r-- | libio/bits/types/__fpos64_t.h | 16 | ||||
| -rw-r--r-- | libio/bits/types/__fpos_t.h | 16 | ||||
| -rw-r--r-- | libio/bits/types/cookie_io_functions_t.h | 63 | ||||
| -rw-r--r-- | libio/bits/types/struct_FILE.h | 120 | ||||
| -rw-r--r-- | libio/iolibio.h | 6 | ||||
| -rw-r--r-- | libio/libio.h | 25 | ||||
| -rw-r--r-- | libio/libioP.h | 7 | ||||
| -rw-r--r-- | libio/stdio.h | 95 | ||||
| -rw-r--r-- | scripts/check-installed-headers.sh | 5 | ||||
| -rw-r--r-- | sysdeps/unix/sysv/linux/bits/_G_config.h | 20 |
24 files changed, 433 insertions, 332 deletions
@@ -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] @@ -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 2b60d29f5f..8c81bc4278 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 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/include/bits/types/__fpos64_t.h b/include/bits/types/__fpos64_t.h new file mode 100644 index 0000000000..68cc4e8b66 --- /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 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/bits/types/struct_FILE.h b/include/bits/types/struct_FILE.h new file mode 100644 index 0000000000..971407292b --- /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 f1e987ae5e..3b6da17d82 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 918a86bb74..3e08ed0eeb 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 68de2fcaa0..0000000000 --- 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 fae5b932a1..cefc2c855b 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 eb42b22153..4ab919031f 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) |
