diff options
Diffstat (limited to 'libio/stdio.h')
-rw-r--r-- | libio/stdio.h | 245 |
1 files changed, 90 insertions, 155 deletions
diff --git a/libio/stdio.h b/libio/stdio.h index d8d7fa0611..739e08610d 100644 --- a/libio/stdio.h +++ b/libio/stdio.h @@ -1,5 +1,5 @@ /* Define ISO C stdio on top of C++ iostreams. - Copyright (C) 1991-2016 Free Software Foundation, Inc. + Copyright (C) 1991-2018 Free Software Foundation, Inc. This file is part of the GNU C Library. The GNU C Library is free software; you can redistribute it and/or @@ -21,62 +21,35 @@ */ #ifndef _STDIO_H +#define _STDIO_H 1 -#if !defined __need_FILE && !defined __need___FILE -# define _STDIO_H 1 -# include <features.h> +#define __GLIBC_INTERNAL_STARTING_HEADER_IMPLEMENTATION +#include <bits/libc-header-start.h> __BEGIN_DECLS -# define __need_size_t -# define __need_NULL -# include <stddef.h> +#define __need_size_t +#define __need_NULL +#include <stddef.h> -# include <bits/types.h> -# define __need_FILE -# define __need___FILE -#endif /* Don't need FILE. */ +#define __need___va_list +#include <stdarg.h> +#include <bits/types.h> +#include <bits/types/__fpos_t.h> +#include <bits/types/__fpos64_t.h> +#include <bits/types/__FILE.h> +#include <bits/types/FILE.h> +#include <bits/types/struct_FILE.h> -#if !defined __FILE_defined && defined __need_FILE - -/* Define outside of namespace so the C++ is happy. */ -struct _IO_FILE; - -__BEGIN_NAMESPACE_STD -/* The opaque type of streams. This is the definition used elsewhere. */ -typedef struct _IO_FILE FILE; -__END_NAMESPACE_STD -#if defined __USE_LARGEFILE64 || defined __USE_POSIX \ - || defined __USE_ISOC99 || defined __USE_XOPEN \ - || defined __USE_POSIX2 -__USING_NAMESPACE_STD(FILE) +#ifdef __USE_GNU +# include <bits/types/cookie_io_functions_t.h> #endif -# define __FILE_defined 1 -#endif /* FILE not defined. */ -#undef __need_FILE - - -#if !defined ____FILE_defined && defined __need___FILE - -/* The opaque type of streams. This is the definition used elsewhere. */ -typedef struct _IO_FILE __FILE; - -# define ____FILE_defined 1 -#endif /* __FILE not defined. */ -#undef __need___FILE - - -#ifdef _STDIO_H -#define _STDIO_USES_IOSTREAM - -#include <libio.h> - #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 @@ -84,7 +57,7 @@ typedef _G_va_list va_list; # endif #endif -#ifdef __USE_XOPEN2K8 +#if defined __USE_UNIX98 || defined __USE_XOPEN2K # ifndef __off_t_defined # ifndef __USE_FILE_OFFSET64 typedef __off_t off_t; @@ -97,7 +70,9 @@ typedef __off64_t off_t; typedef __off64_t off64_t; # define __off64_t_defined # endif +#endif +#ifdef __USE_XOPEN2K8 # ifndef __ssize_t_defined typedef __ssize_t ssize_t; # define __ssize_t_defined @@ -105,15 +80,13 @@ typedef __ssize_t ssize_t; #endif /* The type of the second argument to `fgetpos' and `fsetpos'. */ -__BEGIN_NAMESPACE_STD #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 -__END_NAMESPACE_STD #ifdef __USE_LARGEFILE64 -typedef _G_fpos64_t fpos64_t; +typedef __fpos64_t fpos64_t; #endif /* The possibilities for the third argument to `setvbuf'. */ @@ -123,16 +96,12 @@ typedef _G_fpos64_t fpos64_t; /* Default buffer size. */ -#ifndef BUFSIZ -# define BUFSIZ _IO_BUFSIZ -#endif +#define BUFSIZ 8192 -/* End of file character. - Some things throughout the library rely on this being -1. */ -#ifndef EOF -# define EOF (-1) -#endif +/* The value returned by fgetc and similar functions to indicate the + end of the file. */ +#define EOF (-1) /* The possibilities for the third argument to `fseek'. @@ -165,20 +134,18 @@ 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 #define stderr stderr -__BEGIN_NAMESPACE_STD /* Remove file FILENAME. */ extern int remove (const char *__filename) __THROW; /* Rename file OLD to NEW. */ extern int rename (const char *__old, const char *__new) __THROW; -__END_NAMESPACE_STD #ifdef __USE_ATFILE /* Rename file OLD relative to OLDFD to NEW relative to NEWFD. */ @@ -186,7 +153,18 @@ extern int renameat (int __oldfd, const char *__old, int __newfd, const char *__new) __THROW; #endif -__BEGIN_NAMESPACE_STD +#ifdef __USE_GNU +/* Flags for renameat2. */ +# define RENAME_NOREPLACE (1 << 0) +# define RENAME_EXCHANGE (1 << 1) +# define RENAME_WHITEOUT (1 << 2) + +/* Rename file OLD relative to OLDFD to NEW relative to NEWFD, with + additional flags. */ +extern int renameat2 (int __oldfd, const char *__old, int __newfd, + const char *__new, unsigned int __flags) __THROW; +#endif + /* Create a temporary file and open it read/write. This function is a possible cancellation point and therefore not @@ -207,7 +185,6 @@ extern FILE *tmpfile64 (void) __wur; /* Generate a temporary filename. */ extern char *tmpnam (char *__s) __THROW __wur; -__END_NAMESPACE_STD #ifdef __USE_MISC /* This is the reentrant variant of `tmpnam'. The only difference is @@ -229,7 +206,6 @@ extern char *tempnam (const char *__dir, const char *__pfx) #endif -__BEGIN_NAMESPACE_STD /* Close STREAM. This function is a possible cancellation point and therefore not @@ -240,7 +216,6 @@ extern int fclose (FILE *__stream); This function is a possible cancellation point and therefore not marked with __THROW. */ extern int fflush (FILE *__stream); -__END_NAMESPACE_STD #ifdef __USE_MISC /* Faster versions when locking is not required. @@ -263,7 +238,6 @@ extern int fcloseall (void); #endif -__BEGIN_NAMESPACE_STD #ifndef __USE_FILE_OFFSET64 /* Open a file and create a new stream for it. @@ -292,7 +266,6 @@ extern FILE *__REDIRECT (freopen, (const char *__restrict __filename, # define freopen freopen64 # endif #endif -__END_NAMESPACE_STD #ifdef __USE_LARGEFILE64 extern FILE *fopen64 (const char *__restrict __filename, const char *__restrict __modes) __wur; @@ -311,10 +284,10 @@ 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 -#ifdef __USE_XOPEN2K8 +#if defined __USE_XOPEN2K8 || __GLIBC_USE (LIB_EXT2) /* Create a new stream that refers to a memory buffer. */ extern FILE *fmemopen (void *__s, size_t __len, const char *__modes) __THROW __wur; @@ -326,7 +299,6 @@ extern FILE *open_memstream (char **__bufloc, size_t *__sizeloc) __THROW __wur; #endif -__BEGIN_NAMESPACE_STD /* If BUF is NULL, make STREAM unbuffered. Else make it use buffer BUF, of size BUFSIZ. */ extern void setbuf (FILE *__restrict __stream, char *__restrict __buf) __THROW; @@ -335,7 +307,6 @@ extern void setbuf (FILE *__restrict __stream, char *__restrict __buf) __THROW; else allocate an internal buffer N bytes long. */ extern int setvbuf (FILE *__restrict __stream, char *__restrict __buf, int __modes, size_t __n) __THROW; -__END_NAMESPACE_STD #ifdef __USE_MISC /* If BUF is NULL, make STREAM unbuffered. @@ -348,7 +319,6 @@ extern void setlinebuf (FILE *__stream) __THROW; #endif -__BEGIN_NAMESPACE_STD /* Write formatted output to STREAM. This function is a possible cancellation point and therefore not @@ -369,35 +339,32 @@ 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; -__END_NAMESPACE_STD + __gnuc_va_list __arg) __THROWNL; #if defined __USE_ISOC99 || defined __USE_UNIX98 -__BEGIN_NAMESPACE_C99 /* Maximum chars of output to write in MAXLEN. */ extern int snprintf (char *__restrict __s, size_t __maxlen, const char *__restrict __format, ...) __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))); -__END_NAMESPACE_C99 #endif -#ifdef __USE_GNU +#if __GLIBC_USE (LIB_EXT2) /* 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, ...) @@ -410,14 +377,13 @@ 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))); #endif -__BEGIN_NAMESPACE_STD /* Read formatted input from STREAM. This function is a possible cancellation point and therefore not @@ -460,28 +426,25 @@ extern int __isoc99_sscanf (const char *__restrict __s, # endif #endif -__END_NAMESPACE_STD - #ifdef __USE_ISOC99 -__BEGIN_NAMESPACE_C99 /* Read formatted input from S into argument list ARG. 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 \ @@ -493,37 +456,34 @@ 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 # endif # endif - -__END_NAMESPACE_C99 #endif /* Use ISO C9x. */ -__BEGIN_NAMESPACE_STD /* Read a character from STREAM. These functions are possible cancellation points and therefore not @@ -536,13 +496,8 @@ extern int getc (FILE *__stream); This function is a possible cancellation point and therefore not marked with __THROW. */ extern int getchar (void); -__END_NAMESPACE_STD - -/* 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_POSIX +#ifdef __USE_POSIX199506 /* These are defined in POSIX.1:1996. These functions are possible cancellation points and therefore not @@ -562,7 +517,6 @@ extern int fgetc_unlocked (FILE *__stream); #endif /* Use MISC. */ -__BEGIN_NAMESPACE_STD /* Write a character to STREAM. These functions are possible cancellation points and therefore not @@ -578,11 +532,6 @@ extern int putc (int __c, FILE *__stream); This function is a possible cancellation point and therefore not marked with __THROW. */ extern int putchar (int __c); -__END_NAMESPACE_STD - -/* 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. @@ -594,7 +543,7 @@ __END_NAMESPACE_STD extern int fputc_unlocked (int __c, FILE *__stream); #endif /* Use MISC. */ -#ifdef __USE_POSIX +#ifdef __USE_POSIX199506 /* These are defined in POSIX.1:1996. These functions are possible cancellation points and therefore not @@ -614,7 +563,6 @@ extern int putw (int __w, FILE *__stream); #endif -__BEGIN_NAMESPACE_STD /* Get a newline-terminated string of finite length from STREAM. This function is a possible cancellation point and therefore not @@ -622,22 +570,18 @@ __BEGIN_NAMESPACE_STD extern char *fgets (char *__restrict __s, int __n, FILE *__restrict __stream) __wur; -#if !defined __USE_ISOC11 \ - || (defined __cplusplus && __cplusplus <= 201103L) +#if __GLIBC_USE (DEPRECATED_GETS) /* Get a newline-terminated string from stdin, removing the newline. - DO NOT USE THIS FUNCTION!! There is no limit on how much it will read. - The function has been officially removed in ISO C11. This opportunity - is used to also remove it from the GNU feature list. It is now only - available when explicitly using an old ISO C, Unix, or POSIX standard. - GCC defines _GNU_SOURCE when building C++ code and the function is still - in C++11, so it is also available for C++. + This function is impossible to use safely. It has been officially + removed from ISO C11 and ISO C++14, and we have also removed it + from the _GNU_SOURCE feature list. It remains available when + explicitly using an old ISO C, Unix, or POSIX standard. This function is a possible cancellation point and therefore not marked with __THROW. */ extern char *gets (char *__s) __wur __attribute_deprecated__; #endif -__END_NAMESPACE_STD #ifdef __USE_GNU /* This function does the same as `fgets' but does not lock the stream. @@ -651,7 +595,7 @@ extern char *fgets_unlocked (char *__restrict __s, int __n, #endif -#ifdef __USE_XOPEN2K8 +#if defined __USE_XOPEN2K8 || __GLIBC_USE (LIB_EXT2) /* Read up to (and including) a DELIMITER from STREAM into *LINEPTR (and null-terminate it). *LINEPTR is a pointer returned from malloc (or NULL), pointing to *N characters of space. It is realloc'd as @@ -662,12 +606,12 @@ extern char *fgets_unlocked (char *__restrict __s, int __n, cancellation point. But due to similarity with an POSIX interface or due to the implementation they are cancellation points and therefore not marked with __THROW. */ -extern _IO_ssize_t __getdelim (char **__restrict __lineptr, - size_t *__restrict __n, int __delimiter, - FILE *__restrict __stream) __wur; -extern _IO_ssize_t getdelim (char **__restrict __lineptr, - size_t *__restrict __n, int __delimiter, - FILE *__restrict __stream) __wur; +extern __ssize_t __getdelim (char **__restrict __lineptr, + size_t *__restrict __n, int __delimiter, + FILE *__restrict __stream) __wur; +extern __ssize_t getdelim (char **__restrict __lineptr, + size_t *__restrict __n, int __delimiter, + FILE *__restrict __stream) __wur; /* Like `getdelim', but reads up to a newline. @@ -675,13 +619,12 @@ 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 -__BEGIN_NAMESPACE_STD /* Write a string to STREAM. This function is a possible cancellation point and therefore not @@ -714,7 +657,6 @@ extern size_t fread (void *__restrict __ptr, size_t __size, marked with __THROW. */ extern size_t fwrite (const void *__restrict __ptr, size_t __size, size_t __n, FILE *__restrict __s); -__END_NAMESPACE_STD #ifdef __USE_GNU /* This function does the same as `fputs' but does not lock the stream. @@ -741,7 +683,6 @@ extern size_t fwrite_unlocked (const void *__restrict __ptr, size_t __size, #endif -__BEGIN_NAMESPACE_STD /* Seek to a certain position on STREAM. This function is a possible cancellation point and therefore not @@ -757,7 +698,6 @@ extern long int ftell (FILE *__stream) __wur; This function is a possible cancellation point and therefore not marked with __THROW. */ extern void rewind (FILE *__stream); -__END_NAMESPACE_STD /* The Single Unix Specification, Version 2, specifies an alternative, more adequate interface for the two functions above which deal with @@ -789,7 +729,6 @@ extern __off64_t __REDIRECT (ftello, (FILE *__stream), ftello64); # endif #endif -__BEGIN_NAMESPACE_STD #ifndef __USE_FILE_OFFSET64 /* Get STREAM's position. @@ -812,7 +751,6 @@ extern int __REDIRECT (fsetpos, # define fsetpos fsetpos64 # endif #endif -__END_NAMESPACE_STD #ifdef __USE_LARGEFILE64 extern int fseeko64 (FILE *__stream, __off64_t __off, int __whence); @@ -821,14 +759,12 @@ extern int fgetpos64 (FILE *__restrict __stream, fpos64_t *__restrict __pos); extern int fsetpos64 (FILE *__stream, const fpos64_t *__pos); #endif -__BEGIN_NAMESPACE_STD /* Clear the error and EOF indicators for STREAM. */ extern void clearerr (FILE *__stream) __THROW; /* Return the EOF indicator for STREAM. */ extern int feof (FILE *__stream) __THROW __wur; /* Return the error indicator for STREAM. */ extern int ferror (FILE *__stream) __THROW __wur; -__END_NAMESPACE_STD #ifdef __USE_MISC /* Faster versions when locking is not required. */ @@ -838,13 +774,11 @@ extern int ferror_unlocked (FILE *__stream) __THROW __wur; #endif -__BEGIN_NAMESPACE_STD /* Print a message describing the meaning of the value of errno. This function is a possible cancellation point and therefore not marked with __THROW. */ extern void perror (const char *__s); -__END_NAMESPACE_STD /* Provide the declarations for `sys_errlist' and `sys_nerr' if they are available on this system. Even if available, these variables @@ -885,7 +819,7 @@ extern char *ctermid (char *__s) __THROW; #endif /* Use POSIX. */ -#ifdef __USE_XOPEN +#if (defined __USE_XOPEN && !defined __USE_XOPEN2K) || defined __USE_GNU /* Return the name of the current user. */ extern char *cuserid (char *__s); #endif /* Use X/Open, but not issue 6. */ @@ -900,12 +834,12 @@ 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. */ -#ifdef __USE_POSIX +#ifdef __USE_POSIX199506 /* These are defined in POSIX.1:1996. */ /* Acquire ownership of STREAM. */ @@ -920,12 +854,15 @@ extern void funlockfile (FILE *__stream) __THROW; #endif /* POSIX */ #if defined __USE_XOPEN && !defined __USE_XOPEN2K && !defined __USE_GNU -/* The X/Open standard requires some functions and variables to be - declared here which do not belong into this header. But we have to - follow. In GNU mode we don't do this nonsense. */ -# define __need_getopt -# include <getopt.h> -#endif /* X/Open, but not issue 6 and not for GNU. */ +/* X/Open Issues 1-5 required getopt to be declared in this + header. It was removed in Issue 6. GNU follows Issue 6. */ +# include <bits/getopt_posix.h> +#endif + +/* Slow-path routines used by the optimized inline functions in + bits/stdio.h. */ +extern int __uflow (FILE *); +extern int __overflow (FILE *, int); /* If we are compiling with optimizing read this file. It contains several optimizing inline functions and macros. */ @@ -942,5 +879,3 @@ extern void funlockfile (FILE *__stream) __THROW; __END_DECLS #endif /* <stdio.h> included. */ - -#endif /* !_STDIO_H */ |