diff options
Diffstat (limited to 'libio/stdio.h')
-rw-r--r-- | libio/stdio.h | 740 |
1 files changed, 527 insertions, 213 deletions
diff --git a/libio/stdio.h b/libio/stdio.h index 88e9c6a985..0ed711a8cb 100644 --- a/libio/stdio.h +++ b/libio/stdio.h @@ -1,209 +1,191 @@ -/* This is part of the iostream/stdio library, providing -*- C -*- I/O. - Define ANSI C stdio on top of C++ iostreams. +/* Define ISO C stdio on top of C++ iostreams. Copyright (C) 1991, 1994, 1995, 1996, 1997 Free Software Foundation, Inc. -This library is free software; you can redistribute it and/or -modify it under the terms of the GNU Library General Public -License as published by the Free Software Foundation; either -version 2 of the License, or (at your option) any later version. + The GNU C Library is free software; you can redistribute it and/or + modify it under the terms of the GNU Library General Public License as + published by the Free Software Foundation; either version 2 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 + Library General Public License for more details. -This 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 -Library General Public License for more details. - -You should have received a copy of the GNU Library General Public -License along with this library; if not, write to the Free Software -Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. -*/ + You should have received a copy of the GNU Library General Public + License along with the GNU C Library; see the file COPYING.LIB. If not, + write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330, + Boston, MA 02111-1307, USA. */ /* * ISO C Standard: 4.9 INPUT/OUTPUT <stdio.h> */ #ifndef _STDIO_H -#define _STDIO_H + +#if !defined __need_FILE +#define _STDIO_H 1 +#include <features.h> + +__BEGIN_DECLS + +#define __need_size_t +#define __need_NULL +#include <stddef.h> + +#include <gnu/types.h> +#endif /* Don't need FILE. */ +#undef __need_FILE + + +#ifndef __FILE_defined + +/* The opaque type of streams. */ +typedef struct _IO_FILE FILE; + +#define __FILE_defined 1 +#endif /* FILE not defined. */ + + +#ifdef _STDIO_H #define _STDIO_USES_IOSTREAM #include <libio.h> -#ifndef NULL -#ifdef __cplusplus -#define NULL 0 -#else -#define NULL (void*)0 -#endif -#endif +/* The type of the second argument to `fgetpos' and `fsetpos'. */ +typedef _G_fpos_t fpos_t; -#ifndef EOF -#define EOF (-1) -#endif + +/* Generate a unique file name (and possibly open it with mode "w+b"). */ +extern char *__stdio_gen_tempname __P ((char *__buf, size_t __bufsize, + __const char *__dir, + __const char *__pfx, + int __dir_search, + size_t *__lenptr, + FILE **__streamptr)); + + +/* Print out MESSAGE on the error output and abort. */ +extern void __libc_fatal __P ((__const char *__message)) + __attribute__ ((__noreturn__)); + + +/* The possibilities for the third argument to `setvbuf'. */ +#define _IOFBF 0 /* Fully buffered. */ +#define _IOLBF 1 /* Line buffered. */ +#define _IONBF 2 /* No buffering. */ + + +/* Default buffer size. */ #ifndef BUFSIZ #define BUFSIZ _IO_BUFSIZ #endif -#define _IOFBF 0 /* Fully buffered. */ -#define _IOLBF 1 /* Line buffered. */ -#define _IONBF 2 /* No buffering. */ - -#define SEEK_SET 0 -#define SEEK_CUR 1 -#define SEEK_END 2 - - /* define size_t. Crud in case <sys/types.h> has defined it. */ -#if !defined(_SIZE_T) && !defined(_T_SIZE_) && !defined(_T_SIZE) -#if !defined(__SIZE_T) && !defined(_SIZE_T_) && !defined(___int_size_t_h) -#if !defined(_GCC_SIZE_T) && !defined(_SIZET_) -#define _SIZE_T -#define _T_SIZE_ -#define _T_SIZE -#define __SIZE_T -#define _SIZE_T_ -#define ___int_size_t_h -#define _GCC_SIZE_T -#define _SIZET_ -typedef _IO_size_t size_t; -#endif -#endif + +/* End of file character. + Some things throughout the library rely on this being -1. */ +#ifndef EOF +#define EOF (-1) #endif -typedef struct _IO_FILE FILE; -typedef _IO_fpos_t fpos_t; -#include <stdio_lim.h> +/* The possibilities for the third argument to `fseek'. + These values should not be changed. */ +#define SEEK_SET 0 /* Seek from beginning of file. */ +#define SEEK_CUR 1 /* Seek from current position. */ +#define SEEK_END 2 /* Seek from end of file. */ + #ifdef __USE_SVID /* Default path prefix for `tempnam' and `tmpnam'. */ #define P_tmpdir "/tmp" #endif -/* For use by debuggers. These are linked in if printf or fprintf are used. */ -extern FILE *stdin, *stdout, *stderr; /* TODO */ +/* Get the values: + L_tmpnam How long an array of chars must be to be passed to `tmpnam'. + TMP_MAX The minimum number of unique filenames generated by tmpnam + (and tempnam when it uses tmpnam's name space), + or tempnam (the two are separate). + L_ctermid How long an array to pass to `ctermid'. + L_cuserid How long an array to pass to `cuserid'. + FOPEN_MAX Minimum number of files that can be open at once. + FILENAME_MAX Maximum length of a filename. */ +#include <stdio_lim.h> + + +/* Standard streams. */ +extern FILE *stdin, *stdout, *stderr; +/* Refer to the real names by default. */ #define stdin _IO_stdin #define stdout _IO_stdout #define stderr _IO_stderr -#ifdef __cplusplus -extern "C" { -#endif -#ifndef __P -#if defined(__STDC__) || defined(__cplusplus) || defined(c_plusplus) -#define __P(args) args -#else -#define __P(args) () -#endif -#endif /*!__P*/ - -extern void clearerr __P ((FILE*)); -extern int fclose __P ((FILE*)); -extern int feof __P ((FILE*)); -extern int ferror __P ((FILE*)); -extern int fflush __P ((FILE*)); -extern int fgetc __P ((FILE *)); -extern int fgetpos __P ((FILE* fp, fpos_t *pos)); -extern char* fgets __P ((char*, int, FILE*)); -extern FILE* fopen __P ((__const char*, __const char*)); -extern FILE* fopencookie __P ((void *cookie, __const char *mode, - _IO_cookie_io_functions_t io_functions)); -extern int fprintf __P ((FILE*, __const char* format, ...)); -extern int fputc __P ((int, FILE*)); -extern int fputs __P ((__const char *str, FILE *fp)); -extern size_t fread __P ((void*, size_t, size_t, FILE*)); -extern FILE* freopen __P ((__const char*, __const char*, FILE*)); -extern int fscanf __P ((FILE *fp, __const char* format, ...)); -extern int fseek __P ((FILE* fp, long int offset, int whence)); -extern int fsetpos __P ((FILE* fp, __const fpos_t *pos)); -extern long int ftell __P ((FILE* fp)); -extern size_t fwrite __P ((__const void*, size_t, size_t, FILE*)); -extern int getc __P ((FILE *)); -extern int getchar __P ((void)); -extern char* gets __P ((char*)); -extern void perror __P ((__const char *)); -extern int printf __P ((__const char* format, ...)); -extern int putc __P ((int, FILE *)); -extern int putchar __P ((int)); -extern int puts __P ((__const char *str)); -extern int remove __P ((__const char*)); -extern int rename __P ((__const char* _old, __const char* _new)); -extern void rewind __P ((FILE*)); -extern int scanf __P ((__const char* format, ...)); -extern void setbuf __P ((FILE*, char*)); -extern void setlinebuf __P ((FILE*)); -extern void setbuffer __P ((FILE*, char*, int)); -extern int setvbuf __P ((FILE*, char*, int mode, size_t size)); -extern int sprintf __P ((char*, __const char* format, ...)); -extern int sscanf __P ((__const char* string, __const char* format, ...)); -extern FILE* tmpfile __P ((void)); -extern char* tmpnam __P ((char*)); -#ifdef __USE_MISC -extern char* tmpnam_r __P ((char*)); +/* Remove file FILENAME. */ +extern int remove __P ((__const char *__filename)); +/* Rename file OLD to NEW. */ +extern int rename __P ((__const char *__old, __const char *__new)); + + +/* Create a temporary file and open it read/write. */ +extern FILE *tmpfile __P ((void)); +/* Generate a temporary filename. */ +extern char *tmpnam __P ((char *__s)); + +#ifdef __USE_MISC +/* This is the reentrant variant of `tmpnam'. The only difference is + that it does not allow S to be NULL. */ +extern char *tmpnam_r __P ((char *__s)); #endif -#if defined(__USE_SVID) || defined(__USE_XOPEN) + + +#if defined __USE_SVID || defined __USE_XOPEN +/* Generate a unique temporary filename using up to five characters of PFX + if it is not NULL. The directory to put this file in is searched for + as follows: First the environment variable "TMPDIR" is checked. + If it contains the name of a writable directory, that directory is used. + If not and if DIR is not NULL, that value is checked. If that fails, + P_tmpdir is tried and finally "/tmp". The storage for the filename + is allocated by `malloc'. */ extern char *tempnam __P ((__const char *__dir, __const char *__pfx)); #endif -extern char *__stdio_gen_tempname __P ((char *__buf, size_t bufsize, - __const char *dir, __const char *pfx, - int dir_search, size_t *lenptr, - FILE **streamptr)); -extern int ungetc __P ((int c, FILE* fp)); -extern int vfprintf __P ((FILE *fp, char __const *fmt0, _G_va_list)); -extern int vprintf __P ((char __const *fmt, _G_va_list)); -extern int vsprintf __P ((char* string, __const char* format, _G_va_list)); -extern void __libc_fatal __P ((__const char *__message)) - __attribute__ ((__noreturn__)); -#ifndef __STRICT_ANSI__ -extern int dprintf __P ((int, __const char *, ...)); -extern int vdprintf __P ((int, __const char *, _G_va_list)); -extern int vfscanf __P ((FILE*, __const char *, _G_va_list)); -extern int __vfscanf __P ((FILE*, __const char *, _G_va_list)); -extern int vscanf __P ((__const char *, _G_va_list)); -extern int vsscanf __P ((__const char *, __const char *, _G_va_list)); -extern int __vsscanf __P ((__const char *, __const char *, _G_va_list)); + +/* Close STREAM. */ +extern int fclose __P ((FILE *__stream)); +/* Flush STREAM, or all streams if STREAM is NULL. */ +extern int fflush __P ((FILE *__stream)); + +#ifdef __USE_MISC +/* Faster versions when locking is not required. */ +extern int fclose_unlocked __P ((FILE *__stream)); +extern int fflush_unlocked __P ((FILE *__stream)); #endif #ifdef __USE_GNU +/* Close all streams. */ extern int __fcloseall __P ((void)); extern int fcloseall __P ((void)); - -struct obstack; -extern int obstack_vprintf __P ((struct obstack *__obstack, - __const char *__fmt, _G_va_list)); -extern int obstack_printf __P ((struct obstack *__obstack, __const char *__fmt, - ...)); #endif -#if !defined(__STRICT_ANSI__) || defined(_POSIX_SOURCE) -extern FILE *fdopen __P ((int, __const char *)); -extern int fileno __P ((FILE*)); -extern FILE* popen __P ((__const char*, __const char*)); -extern int pclose __P ((FILE*)); - -#define L_ctermid 9 -#define L_cuserid 9 -/* Return the name of the controlling terminal. */ -extern char *ctermid __P ((char *__buf)); +/* Open a file and create a new stream for it. */ +extern FILE *fopen __P ((__const char *__filename, __const char *__modes)); +/* Open a file, replacing an existing stream with it. */ +extern FILE *freopen __P ((__const char *__restrict __filename, + __const char *__restrict __modes, + FILE *__restrict __stream)); -/* Get character login name of the user. */ -extern char *cuserid __P ((char * __buf)); +#ifdef __USE_POSIX +/* Create a new stream that refers to an existing system file descriptor. */ +extern FILE *fdopen __P ((int __fd, __const char *__modes)); #endif -#ifdef __USE_GNU -extern _IO_ssize_t getdelim __P ((char **, size_t *, int, FILE*)); -extern _IO_ssize_t getline __P ((char **, size_t *, FILE *)); -extern _IO_ssize_t __getline __P ((char **, size_t *, FILE *)); - -extern int snprintf __P ((char *, size_t, __const char *, ...)); -extern int __snprintf __P ((char *, size_t, __const char *, ...)); -extern int vsnprintf __P ((char *, size_t, __const char *, _G_va_list)); -extern int __vsnprintf __P ((char *, size_t, __const char *, _G_va_list)); - -extern int asprintf __P ((char **, const char *, ...)); -extern int vasprintf __P ((char **, const char *, _G_va_list)); +#ifdef __USE_GNU +/* Create a new stream that refers to the given magic cookie, + and uses the given functions for input and output. */ +extern FILE *fopencookie __P ((void *__magic_cookie, __const char *__modes, + _IO_cookie_io_functions_t __io_funcs)); /* Open a stream that writes into a malloc'd buffer that is expanded as necessary. *BUFLOC and *SIZELOC are updated with the buffer's location @@ -211,77 +193,409 @@ extern int vasprintf __P ((char **, const char *, _G_va_list)); extern FILE *open_memstream __P ((char **__bufloc, size_t *__sizeloc)); #endif -extern int __underflow __P ((struct _IO_FILE*)); -extern int __overflow __P ((struct _IO_FILE*, int)); -#ifdef __USE_BSD -extern int sys_nerr; -extern const char *const sys_errlist[]; -#endif -#ifdef __USE_GNU -extern int _sys_nerr; -extern const char *const _sys_errlist[]; +/* If BUF is NULL, make STREAM unbuffered. + Else make it use buffer BUF, of size BUFSIZ. */ +extern void setbuf __P ((FILE *__restrict __stream, char *__restrict __buf)); +/* Make STREAM use buffering mode MODE. + If BUF is not NULL, use N bytes of it for buffering; + else allocate an internal buffer N bytes long. */ +extern int setvbuf __P ((FILE *__restrict __stream, char *__restrict __buf, + int __modes, size_t __n)); + +#ifdef __USE_BSD +/* If BUF is NULL, make STREAM unbuffered. + Else make it use SIZE bytes of BUF for buffering. */ +extern void setbuffer __P ((FILE *__stream, char *__buf, size_t __size)); + +/* Make STREAM line-buffered. */ +extern void setlinebuf __P ((FILE *__stream)); #endif -/* Handle locking of streams. */ -#ifdef __USE_MISC -extern void clearerr_locked __P ((FILE *)); -extern void clearerr_unlocked __P ((FILE *)); -extern int feof_locked __P ((FILE *)); -extern int feof_unlocked __P ((FILE *)); -extern int ferror_locked __P ((FILE*)); -extern int ferror_unlocked __P ((FILE*)); -extern int fileno_locked __P ((FILE *)); -extern int fileno_unlocked __P ((FILE *)); -extern int fclose_unlocked __P ((FILE *)); -extern int fflush_locked __P ((FILE *)); -extern int fflush_unlocked __P ((FILE *)); -extern size_t fread_unlocked __P ((void *, size_t, size_t, FILE *)); -extern size_t fwrite_unlocked __P ((const void *, size_t, size_t, FILE *)); - -extern int fputc_locked __P ((int, FILE*)); -extern int fputc_unlocked __P ((int, FILE*)); -extern int getc_locked __P ((FILE *)); -extern int getchar_locked __P ((void)); -extern int putc_locked __P ((int, FILE *)); -extern int putchar_locked __P ((int)); - -# ifndef _LIBC -# define getc_locked(fp) _IO_getc (fp) -# define getchar_locked() _IO_getc (stdin) -# define putchar_locked(c) _IO_putc (c, stdout) -# endif + +/* Write formatted output to STREAM. */ +extern int fprintf __P ((FILE *__restrict __stream, + __const char *__restrict __format, ...)); +/* Write formatted output to stdout. */ +extern int printf __P ((__const char *__restrict __format, ...)); +/* Write formatted output to S. */ +extern int sprintf __P ((char *__restrict __s, + __const char *__restrict __format, ...)); + +/* Write formatted output to S from argument list ARG. */ +extern int vfprintf __P ((FILE *__restrict __s, + __const char *__restrict __format, + _G_va_list __arg)); +/* Write formatted output to stdout from argument list ARG. */ +extern int vprintf __P ((__const char *__restrict __format, + _G_va_list __arg)); +/* Write formatted output to S from argument list ARG. */ +extern int vsprintf __P ((char *__restrict __s, + __const char *__restrict __format, + _G_va_list __arg)); + +#ifdef __OPTIMIZE__ +extern __inline int +vprintf (const char *__restrict __fmt, _G_va_list __arg) +{ + return vfprintf (stdout, __fmt, __arg); +} +#endif /* Optimizing. */ + +#ifdef __USE_GNU +/* Maximum chars of output to write in MAXLEN. */ +extern int __snprintf __P ((char *__s, size_t __maxlen, + __const char *__format, ...)); +extern int snprintf __P ((char *__s, size_t __maxlen, + __const char *__format, ...)); + +extern int __vsnprintf __P ((char *__s, size_t __maxlen, + __const char *__format, _G_va_list __arg)); +extern int vsnprintf __P ((char *__s, size_t __maxlen, + __const char *__format, _G_va_list __arg)); + +/* Write formatted output to a string dynamically allocated with `malloc'. + Store the address of the string in *PTR. */ +extern int vasprintf __P ((char **__ptr, __const char *__f, + _G_va_list __arg)); +extern int asprintf __P ((char **__ptr, __const char *__fmt, ...)); + +/* Write formatted output to a file descriptor. */ +extern int vdprintf __P ((int __fd, __const char *__fmt, _G_va_list __arg)); +extern int dprintf __P ((int __fd, __const char *__fmt, ...)); #endif + +/* Read formatted input from STREAM. */ +extern int fscanf __P ((FILE *__restrict __stream, + __const char *__restrict __format, ...)); +/* Read formatted input from stdin. */ +extern int scanf __P ((__const char *__restrict __format, ...)); +/* Read formatted input from S. */ +extern int sscanf __P ((__const char *__restrict __s, + __const char *__restrict __format, ...)); + +#ifdef __USE_GNU +/* Read formatted input from S into argument list ARG. */ +extern int __vfscanf __P ((FILE *__s, __const char *__format, + _G_va_list __arg)); +extern int vfscanf __P ((FILE *__s, __const char *__format, + _G_va_list __arg)); + +/* Read formatted input from stdin into argument list ARG. */ +extern int __vscanf __P ((__const char *__format, _G_va_list __arg)); +extern int vscanf __P ((__const char *__format, _G_va_list __arg)); + +/* Read formatted input from S into argument list ARG. */ +extern int __vsscanf __P ((__const char *__s, __const char *__format, + _G_va_list __arg)); +extern int vsscanf __P ((__const char *__s, __const char *__format, + _G_va_list __arg)); + + +#ifdef __OPTIMIZE__ +extern __inline int +vfscanf (FILE *__s, const char *__fmt, _G_va_list __arg) +{ + return __vfscanf (__s, __fmt, __arg); +} +extern __inline int +vscanf (const char *__fmt, _G_va_list __arg) +{ + return __vfscanf (stdin, __fmt, __arg); +} +extern __inline int +vsscanf (const char *__s, const char *__fmt, _G_va_list __arg) +{ + return __vsscanf (__s, __fmt, __arg); +} +#endif /* Optimizing. */ +#endif /* Use GNU. */ + + +/* Read a character from STREAM. */ +extern int fgetc __P ((FILE *__stream)); +extern int getc __P ((FILE *__stream)); + +/* Read a character from stdin. */ +extern int getchar __P ((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 __OPTIMIZE__ +extern __inline int +getchar (void) +{ + return _IO_getc (stdin); +} +#endif /* Optimizing. */ + #if defined __USE_POSIX || defined __USE_MISC /* These are defined in POSIX.1:1996. */ -extern void flockfile __P ((FILE *)); -extern void funlockfile __P ((FILE *)); -extern int ftrylockfile __P ((FILE *)); - -extern int getc_unlocked __P ((FILE *)); +extern int getc_unlocked __P ((FILE *__stream)); extern int getchar_unlocked __P ((void)); -extern int putc_unlocked __P ((int, FILE *)); -extern int putchar_unlocked __P ((int)); - -# ifndef _LIBC -# define getc_unlocked(fp) _IO_getc_unlocked (fp) -# define getchar_unlocked() _IO_getc_unlocked (stdin) -# define putc_unlocked(c, fp) _IO_putc_unlocked ((c), (fp)) -# define putchar_unlocked(c) _IO_putc_unlocked ((c), stdout) -# endif -#endif /* POSIX || misc */ -#define getc(_fp) _IO_getc (_fp) +#ifdef __OPTIMIZE__ +extern __inline int +getc_unlocked (FILE *__fp) +{ + return _IO_getc_unlocked (__fp); +} + +extern __inline int +getchar_unlocked (void) +{ + return _IO_getc_unlocked (stdin); +} +#endif /* Optimizing. */ +#endif /* Use POSIX or MISC. */ + + +/* Write a character to STREAM. */ +extern int fputc __P ((int __c, FILE *__stream)); +extern int putc __P ((int __c, FILE *__stream)); + +/* Write a character to stdout. */ +extern int putchar __P ((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) -#define putchar(_ch) _IO_putc (_ch, stdout) -#define getchar() _IO_getc (stdin) +#ifdef __OPTIMIZE__ +extern __inline int +putchar (int __c) +{ + return _IO_putc (__c, stdout); +} +#endif -#ifdef __cplusplus +#ifdef __USE_MISC +/* Faster version when locking is not necessary. */ +extern int fputc_unlocked __P ((int __c, FILE *__stream)); + +#ifdef __OPTIMIZE__ +extern __inline int +fputc_unlocked (int __c, FILE *__stream) +{ + return _IO_putc_unlocked (__c, __stream); } +#endif /* Optimizing. */ +#endif /* Use MISC. */ + +#if defined __USE_POSIX || defined __USE_MISC +/* These are defined in POSIX.1:1996. */ +extern int putc_unlocked __P ((int __c, FILE *__stream)); +extern int putchar_unlocked __P ((int __c)); + +#ifdef __OPTIMIZE__ +extern __inline int +putc_unlocked (int __c, FILE *__stream) +{ + return _IO_putc_unlocked (__c, __stream); +} + +extern __inline int +putchar_unlocked (int __c) +{ + return _IO_putc_unlocked (__c, stdout); +} +#endif /* Optimizing. */ +#endif /* Use POSIX or MISc. */ + + +#if defined __USE_SVID || defined __USE_MISC +/* Get a word (int) from STREAM. */ +extern int getw __P ((FILE *__stream)); + +/* Write a word (int) to STREAM. */ +extern int putw __P ((int __w, FILE *__stream)); #endif +/* Get a newline-terminated string of finite length from STREAM. */ +extern char *fgets __P ((char *__restrict __s, int __n, + FILE *__restrict __stream)); + +/* 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. */ +extern char *gets __P ((char *__s)); + + +#ifdef __USE_GNU +/* 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 + necessary. Returns the number of characters read (not including the + null terminator), or -1 on error or EOF. */ +_IO_ssize_t __getdelim __P ((char **__lineptr, size_t *__n, + int __delimiter, FILE *__stream)); +_IO_ssize_t getdelim __P ((char **__lineptr, size_t *__n, + int __delimiter, FILE *__stream)); + +/* Like `getdelim', but reads up to a newline. */ +_IO_ssize_t __getline __P ((char **__lineptr, size_t *__n, FILE *__stream)); +_IO_ssize_t getline __P ((char **__lineptr, size_t *__n, FILE *__stream)); + +#ifdef __OPTIMIZE__ +extern __inline _IO_ssize_t +getline (char **__lineptr, size_t *__n, FILE *__stream) +{ + return __getdelim (__lineptr, __n, '\n', __stream); +} +#endif /* Optimizing. */ +#endif + + +/* Write a string to STREAM. */ +extern int fputs __P ((__const char *__restrict __s, + FILE *__restrict __stream)); +/* Write a string, followed by a newline, to stdout. */ +extern int puts __P ((__const char *__s)); + + +/* Push a character back onto the input buffer of STREAM. */ +extern int ungetc __P ((int __c, FILE *__stream)); + + +/* Read chunks of generic data from STREAM. */ +extern size_t fread __P ((void *__restrict __ptr, size_t __size, + size_t __n, FILE *__restrict __stream)); +/* Write chunks of generic data to STREAM. */ +extern size_t fwrite __P ((__const void *__restrict __ptr, size_t __size, + size_t __n, FILE *__restrict __s)); + +#ifdef __USE_MISC +/* Faster versions when locking is not necessary. */ +extern size_t fread_unlocked __P ((void *__restrict __ptr, size_t __size, + size_t __n, FILE *__restrict __stream)); +extern size_t fwrite_unlocked __P ((__const void *__restrict __ptr, + size_t __size, size_t __n, + FILE *__restrict __stream)); +#endif + + +/* Seek to a certain position on STREAM. */ +extern int fseek __P ((FILE *__stream, long int __off, int __whence)); +/* Return the current position of STREAM. */ +extern long int ftell __P ((FILE *__stream)); +/* Rewind to the beginning of STREAM. */ +extern void rewind __P ((FILE *__stream)); + +/* Get STREAM's position. */ +extern int fgetpos __P ((FILE *__restrict __stream, + fpos_t *__restrict __pos)); +/* Set STREAM's position. */ +extern int fsetpos __P ((FILE *__stream, __const fpos_t *__pos)); + + +/* Clear the error and EOF indicators for STREAM. */ +extern void clearerr __P ((FILE *__stream)); +/* Return the EOF indicator for STREAM. */ +extern int feof __P ((FILE *__stream)); +/* Return the error indicator for STREAM. */ +extern int ferror __P ((FILE *__stream)); + +#ifdef __USE_MISC +/* Faster versions when locking is not required. */ +extern void clearerr_unlocked __P ((FILE *__stream)); +extern int feof_unlocked __P ((FILE *__stream)); +extern int ferror_unlocked __P ((FILE *__stream)); + +#ifdef __OPTIMIZE__ +extern __inline int +feof_unlocked (FILE *__stream) +{ + return _IO_feof_unlocked (__stream); +} + +extern __inline int +ferror_unlocked (FILE *__stream) +{ + return _IO_ferror_unlocked (__stream); +} +#endif /* Optimizing. */ +#endif + + +/* Print a message describing the meaning of the value of errno. */ +extern void perror __P ((__const char *__s)); + +/* These variables normally should not be used directly. The `strftime' + function provides all the needed functionality. */ +#ifdef __USE_BSD +extern int sys_nerr; +extern __const char *__const sys_errlist[]; +#endif +#ifdef __USE_GNU +extern int _sys_nerr; +extern __const char *__const _sys_errlist[]; +#endif + + +#ifdef __USE_POSIX +/* Return the system file descriptor for STREAM. */ +extern int fileno __P ((FILE *__stream)); +#endif /* Use POSIX. */ + +#ifdef __USE_MISC +/* Faster version when locking is not required. */ +extern int fileno_unlocked __P ((FILE *__stream)); +#endif + + +#if (defined __USE_POSIX2 || defined __USE_SVID || defined __USE_BSD || \ + defined __USE_MISC) +/* Create a new stream connected to a pipe running the given command. */ +extern FILE *popen __P ((__const char *__command, __const char *__modes)); + +/* Close a stream opened by popen and return the status of its child. */ +extern int pclose __P ((FILE *__stream)); +#endif + + +#ifdef __USE_POSIX +/* Return the name of the controlling terminal. */ +extern char *ctermid __P ((char *__s)); +#endif /* Use POSIX. */ + + +#ifdef __USE_XOPEN +/* Return the name of the current user. */ +extern char *cuserid __P ((char *__s)); +#endif /* Use X/Open. */ + + +#ifdef __USE_GNU +struct obstack; /* See <obstack.h>. */ + +/* Write formatted output to an obstack. */ +extern int obstack_printf __P ((struct obstack *__obstack, + __const char *__format, ...)); +extern int obstack_vprintf __P ((struct obstack *__obstack, + __const char *__format, + _G_va_list __args)); +#endif /* Use GNU. */ + + +#if defined __USE_POSIX || defined __USE_MISC +/* These are defined in POSIX.1:1996. */ + +/* Acquire ownership of STREAM. */ +extern void flockfile __P ((FILE *__stream)); + +/* Try to acquire ownership of STREAM but do not block if it is not + possible. */ +extern int ftrylockfile __P ((FILE *__stream)); + +/* Relinquish the ownership granted for STREAM. */ +extern void funlockfile __P ((FILE *__stream)); +#endif /* POSIX || misc */ + +__END_DECLS + +#endif /* <stdio.h> included. */ #endif /* !_STDIO_H */ |