From patchwork Mon Jun 5 13:45:09 2017 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Zack Weinberg X-Patchwork-Id: 20801 Received: (qmail 37795 invoked by alias); 5 Jun 2017 13:46:03 -0000 Mailing-List: contact libc-alpha-help@sourceware.org; run by ezmlm Precedence: bulk List-Id: List-Unsubscribe: List-Subscribe: List-Archive: List-Post: List-Help: , Sender: libc-alpha-owner@sourceware.org Delivered-To: mailing list libc-alpha@sourceware.org Received: (qmail 27961 invoked by uid 89); 5 Jun 2017 13:45:45 -0000 Authentication-Results: sourceware.org; auth=none X-Virus-Found: No X-Spam-SWARE-Status: No, score=-25.4 required=5.0 tests=AWL, BAYES_00, GIT_PATCH_0, GIT_PATCH_1, GIT_PATCH_2, GIT_PATCH_3, RP_MATCHES_RCVD, SPF_PASS autolearn=ham version=3.3.2 spammy=Former, 0x20, SHOULD, sticks X-HELO: mailbackend.panix.com From: Zack Weinberg To: libc-alpha@sourceware.org Subject: [RFC PATCH] Don't install libio.h or _G_config.h. Date: Mon, 5 Jun 2017 09:45:09 -0400 Message-Id: <20170605134509.18163-1-zackw@panix.com> MIME-Version: 1.0 This is an experimental patch which removes libio.h and _G_config.h from the set of application-exposed headers. It's probably too risky for 2.26 at this point, but I would like to ask people with the ability to try archive rebuilds to find out what applications break. (Note: you may need to install my "__need macro removals" patch series to get this to apply cleanly.) The public stdio.h no longer defines 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 SHOULD be no ABI impact, but if the ABI broke in ways the testsuite doesn't catch, then I won't have noticed. (Unfortunately, libc.so cannot be expected to be binary identical.) An important user-visible side effect is that neither getc nor putc is defined as a macro anymore. The C standard does not require them to be macros, but we might conceivably need no-op macros for compatibility's sake. Internally, be aware that stdio.h doesn't pull in libio.h anymore, which means none of the _IO_* names for anything are visible unless you specifically ask for them. (You probably want to be using __* names instead, or adding more PLT-bypass wrappers to include/stdio.h and using the public names.) It passes the full testsuite on x86_64-linux, and the compile-only testsuite on all platforms that can currently be tested using build-many-glibcs -- I manually applied JDA's hppa pthread patches, so that set includes hppa but not coldfire or sh. 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 x86-64 and AFAICT isn't actually exercised by glibc's testsuite even on architectures that do build it. Testing this properly would require _really_ old binaries, compiled against glibc 2.0, possibly statically-linked-but-using-NSS. Substantial clean-ups to the libio implementation are possible if this sticks, but I haven't done 'em; this is intended to be minimal. There is a small amount of code duplication in bits/stdio.h, of macro bodies from libio.h that are no longer available. I did fix a number of internal .c files that were manually doing PLT bypass for flockfile and funlockfile; they can now rely on include/stdio.h to do it for them. * 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. --- benchtests/strcoll-inputs/filelist#en_US.UTF-8 | 2 - conform/data/stdio.h-data | 2 +- csu/init.c | 2 +- grp/fgetgrent_r.c | 4 - grp/putgrent.c | 3 - gshadow/fgetsgent_r.c | 8 +- gshadow/putsgent.c | 4 +- include/bits/stdio.h | 9 + include/bits/types/FILE_internals.h | 1 + include/bits/types/__fpos_t.h | 1 + include/bits/types/cookie_io_functions_t.h | 1 + include/libio.h | 18 +- include/stdio.h | 51 ++-- include/stdio_ext.h | 1 + libio/Makefile | 7 +- libio/__fbufsize.c | 1 + libio/__flbf.c | 1 + libio/__fpending.c | 1 + libio/__freadable.c | 1 + libio/__freading.c | 1 + libio/__fwritable.c | 1 + libio/__fwriting.c | 1 + libio/bits/stdio.h | 71 ++++-- libio/bits/stdio2.h | 31 +-- libio/bits/types/FILE.h | 7 +- libio/bits/types/FILE_internals.h | 110 ++++++++ libio/bits/types/__FILE.h | 5 + libio/bits/types/__fpos_t.h | 19 ++ libio/bits/types/cookie_io_functions_t.h | 61 +++++ libio/libio.h | 333 ++++++++++--------------- libio/libioP.h | 13 +- libio/oldfileops.c | 21 +- libio/oldiofdopen.c | 16 +- libio/oldiofopen.c | 10 +- libio/oldiopopen.c | 12 +- libio/oldstdfiles.c | 10 +- libio/stdio.h | 82 +++--- malloc/malloc.c | 1 + misc/err.c | 4 +- misc/getpass.c | 2 - misc/getttyent.c | 3 - misc/mntent_r.c | 3 - posix/getopt.c | 14 +- pwd/fgetpwent_r.c | 3 - shadow/fgetspent_r.c | 2 - shadow/putspent.c | 2 - stdio-common/tstgetln.c | 3 +- sysdeps/generic/_G_config.h | 54 +--- sysdeps/ieee754/ldbl-opt/Makefile | 2 +- sysdeps/ieee754/ldbl-opt/nldbl-compat.c | 4 +- sysdeps/ieee754/ldbl-opt/nldbl-compat.h | 14 +- sysdeps/ieee754/ldbl-opt/nldbl-fscanf.c | 2 +- sysdeps/ieee754/ldbl-opt/nldbl-iovfscanf.c | 8 - sysdeps/ieee754/ldbl-opt/nldbl-scanf.c | 2 +- sysdeps/ieee754/ldbl-opt/nldbl-vfscanf.c | 2 +- sysdeps/ieee754/ldbl-opt/nldbl-vscanf.c | 2 +- sysdeps/unix/sysv/linux/_G_config.h | 53 +--- 57 files changed, 566 insertions(+), 536 deletions(-) create mode 100644 include/bits/stdio.h create mode 100644 include/bits/types/FILE_internals.h create mode 100644 include/bits/types/__fpos_t.h create mode 100644 include/bits/types/cookie_io_functions_t.h create mode 100644 libio/bits/types/FILE_internals.h create mode 100644 libio/bits/types/__fpos_t.h create mode 100644 libio/bits/types/cookie_io_functions_t.h delete mode 100644 sysdeps/ieee754/ldbl-opt/nldbl-iovfscanf.c 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 /* 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 #include -#include -#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 #include -#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 +# 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 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 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 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 -#endif -#include - -#ifndef _ISOMAC -#ifndef _LIBC_LIBIO_H -#define _LIBC_LIBIO_H +#ifndef _IO_STDIO_H +# if !defined _ISOMAC && defined _IO_MTSAFE_IO +# include +# endif +# include +# 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 f68f633bd6..824e970435 100644 --- a/include/stdio.h +++ b/include/stdio.h @@ -1,4 +1,7 @@ #ifndef _STDIO_H +# if !defined _ISOMAC && defined _IO_MTSAFE_IO +# include +# endif # include # 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) @@ -96,9 +99,15 @@ libc_hidden_proto (__fortify_fail) /* 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. */ @@ -117,18 +126,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 # ifndef _ISOMAC +# include libc_hidden_proto (__fsetlocking) diff --git a/libio/Makefile b/libio/Makefile index a002a3365c..63191f386c 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 @@ . */ #include +#include 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 @@ . */ #include +#include 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 @@ . */ #include +#include 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 @@ . */ #include +#include 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 @@ . */ #include +#include 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 @@ . */ #include +#include 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 @@ . */ #include +#include 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 . */ +#ifndef _BITS_STDIO_H +#define _BITS_STDIO_H 1 + #ifndef _STDIO_H # error "Never include directly; use instead." #endif +#include + +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,33 +49,46 @@ 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 /* Faster version when locking is not necessary. */ __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 . + + 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 + . */ + + +#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 + +/* 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 +#include + +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 + . */ + +#ifndef __cookie_io_functions_t_defined +#define __cookie_io_functions_t_defined 1 + +#include + +#define __need_size_t +#include + +/* 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 518ffd8e44..d7f9d41cbc 100644 --- a/libio/libio.h +++ b/libio/libio.h @@ -28,10 +28,54 @@ #ifndef _IO_STDIO_H #define _IO_STDIO_H +#include + +#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 + +#define __need_size_t +#define __need_wchar_t +#define __need_NULL +#include + +#define __need___va_list +#include + +#include +#include +#include + +#include +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 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 -#ifdef __GNUC_VA_LIST -# undef _IO_va_list -# define _IO_va_list __gnuc_va_list -#endif /* __GNUC_VA_LIST */ - -#ifndef __P -# include -#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,15 +134,11 @@ #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 -#endif +#define _IO_FLAGS2_SCANF_STD 16 +#define _IO_FLAGS2_NOCLOSE 32 +#define _IO_FLAGS2_CLOEXEC 64 /* These are "formatting flags" matching the iostream fmtflags enum values. */ #define _IO_SKIPWS 01 @@ -141,34 +160,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; +#include +#include +#include +#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. */ @@ -180,7 +232,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 @@ -235,166 +286,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 -/* 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); +/* 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; -/* 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; +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) \ @@ -408,7 +333,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 \ @@ -420,7 +344,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) @@ -463,28 +386,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 -# if SHLIB_COMPAT (libc, GLIBC_2_0, GLIBC_2_1) -# define _IO_fwide_maybe_incompatible \ +#if defined SHARED +# include +# 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) \ { \ @@ -498,7 +421,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); @@ -506,14 +428,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 #endif -#ifdef __cplusplus -} -#endif - #endif /* _IO_STDIO_H */ diff --git a/libio/libioP.h b/libio/libioP.h index eb93418c8d..924126de39 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 @@ -623,13 +620,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 +#define __need___va_list +#include + #include #include #include +#include -#define _STDIO_USES_IOSTREAM - -#include +#ifdef __USE_GNU +# include +#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 aa45626093..d3f756b82a 100644 --- a/malloc/malloc.c +++ b/malloc/malloc.c @@ -222,6 +222,7 @@ #include #include /* needed for malloc_stats */ +#include /* needed for FILE internals in malloc_stats */ #include #include 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 #include #include - +#include #include -#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 #include -#define flockfile(s) _IO_flockfile (s) -#define funlockfile(s) _IO_funlockfile (s) #include /* 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 #include -#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 #include -#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 #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 # 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 #include -#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 #include -#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 #include -#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 . */ +#include #include -#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 -#define __need_size_t -#if defined _LIBC || defined _GLIBCPP_USE_WCHAR_T -# define __need_wchar_t -#endif -#define __need_NULL -#include - -#include -#if defined _LIBC || defined _GLIBCPP_USE_WCHAR_T -# include -#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 -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 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 84c4aeeed9..6632291cf7 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 -#define __need_size_t -#if defined _LIBC || defined _GLIBCPP_USE_WCHAR_T -# define __need_wchar_t -#endif -#define __need_NULL -#include - -#include -#if defined _LIBC || defined _GLIBCPP_USE_WCHAR_T -# include -#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 -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 if `st_blksize' exists. */ -#define _G_HAVE_ST_BLKSIZE defined (_STATBUF_ST_BLKSIZE) - -#define _G_BUFSIZ 8192 - #endif /* _G_config.h */