From 2f6d1f1be920d156768f7fa17957c782c770ed36 Mon Sep 17 00:00:00 2001 From: Ulrich Drepper Date: Tue, 25 Feb 1997 05:18:05 +0000 Subject: update from main archive 970225 1997-02-24 23:05 Wolfram Gloger * malloc/malloc.c (malloc_get_state): New function. Saves global malloc state to an opaque data structure which is dynamically allocated in the heap. * malloc/malloc.c (malloc_set_state): New function. Restore previously obtained state. * malloc/malloc.h: Add declaration of malloc_get_state() and malloc_set_state(). 1997-02-24 23:27 Ulrich Drepper * sysdeps/libm-ieee754/s_cbrtl.c: Shift B1_EXP value to right position. 1997-02-24 17:38 Ulrich Drepper * misc/error.c: Make error and error_at_line weak aliases of __error and __error_at_line respectively. Suggested by David Mosberger-Tang . * sysdeps/unix/sysv/linux/i386/socket.S: Update copyright. 1997-02-22 11:30 Andreas Schwab * elf/ldd.bash.in: Run the program directly, not as argument to the dynamic linker, if it contains an interpreter segment. * elf/ldd.sh.in: Likewise. * elf/rtld.c (dl_main): In verify mode check whether the dynamic object contains an interpreter segment and exit with 2 if not. 1997-02-23 01:23 Andreas Schwab * Makefile (distribute): Remove nsswitch.h, netgroup.h, mcheck.h and xlocale.h. Make-dist adds them automagically. 1997-02-22 12:25 Andreas Schwab * locale/C-time.c (_nl_C_LC_TIME): Add missing entry for time-era-num-entries. 1997-02-06 13:49 Andreas Schwab * rellns-sh: No need to check for existance of first parameter. 1997-02-24 15:20 Jonathan T. Agnew * glibcbug.in: Don't mention destination on MAIL_AGENT command line to avoid duplicate mail. 1997-02-24 03:51 Ulrich Drepper * Makefile (distribute): Add isomac.c. (tests): Run isomac test. * features.h (__USE_ISOC9X): New macro. * catgets/catgets.c: Don't use global variable `optind'. Instead use result computed by argp_parse. * db/makedb: Likewise. * locale/programs/locale.c: Likewise. * locale/programs/localedef.c: Likewise. * libio/stdio.h: Rewrite. Make it more readable and add comments. * libio/clearerr.c: Remove clearerr_locked alias. * libio/feof.c: Remove feof_locked alias. * libio/ferror.c: Remove feof_locked alias. * libio/fileno.c: Remove fileno_locked alias. * libio/fputc.c: Remove fputc_locked alias. * libio/getc.c: Remove getc_locked alias. * libio/getchar.c: Remove getchar_locked alias. * libio/iofflush.c: Remove fflush_locked alias. * libio/putc.c: Remove putc_locked alias. * libio/putc.c: Remove putchar_locked alias. * stdio-common/printf_fp.c: When number is inifinity print INF or inf depending on case of specifier. Same for NaN where NAN or nan is printed. Specified in ISO C 9X. * misc/sys/cdefs.h (__restrict): Define to empty string for now. * stdio/stdio.h: Add __restrict to prototypes where necessary. * libio/stdio.h: Likewise. * stdlib/stdlib.h: Likewise. * string/string.h: Likewise. * time/time.h: Likewise. * wcsmbs/wchar.h: Likewise. * stdlib/strtod.c: Change to recognize INF, INFINITY, NAN, and NAN(...). * sysdeps/ieee754/huge_val.h: Define HUGE_VALF and HUGE_VALL instead of HUGE_VALf and HUGE_VALL. * stdlib/strtof.c (FLOAT_HUGE_VAL): Use standard name HUGE_VALF instead of HUGE_VALf. * wcsmbs/wcstof.c: Likewise. * stdlib/strtold.c (FLOAT_HUGE_VAL): Use standard name HUGE_VALL instead of HUGE_VALl. * wcsmbs/wcstold.c: Likewise. * sysdeps/posix/gai_strerror.c: Use size_t for counter variable to avoid warning. * wcsmbs/Makefile (routines): Add wcscasecmp and wcsncase. * wcsmbs/wchar.h: Add prototypes for wcscasecmp and wcsncase. * wcsmbs/wcscasecmp.c: New file. * wcsmbs/wcsncase.c: New file. * stdlib/strtol.c: Define wide character quad word functions as wcstoll and wcstoull and normal versions as strtoll and strtoull. * wcsmbs/wchar.h: Add prototypes for wcstoll and wcstoull. * wcsmbs/wcstoq: Renamed to wcstoll.c. * wcsmbs/wcstouq: Renamed to wcstoull.c. * wcsmbs/wcstoll.c: Renamed from wcstoq.c. Make wcstoq a weak alias of wcstoll. * wcsmbs/wcstoull.c: Renamed from wcstouq.c. Make wcstouq a weak alias of wcstoull. * wcsmbs/Makefile (routines): Replace wcstoq and wcstouq by wcstoll and wcstoull respectively. * stdlib/strtoq.c: Rename to strtoll.c. * stdlib/strtouq.c: Rename to strtoull.c. * stdlib/strtoll.c: Renamed from strtoq.c. Make strtoq a weak alias of strtoll. * stdlib/strtoll.c: Renamed from strtouq.c. Make strtouq a weak alias of strtoull. * stdlib/Makefile (routines): Replace strtoq and strtouq by strtoll and strtoull respectively. * stdio-common/vfscanf.c: Don't use __strtoq_internal and __strtouq_internal but instead __strtoll_internal and __strtoull_internal respectively. * stdlib/stdlib.h (strtoq): Use __internal_strtoll in inline version. (strtouq): Similar with __internal_strtoull. * wcsmbs/wchar.h (wcstoq): Use __internal_wcstoll in inline version. (wcstouq): Similar with __internal_wcstoull. 1997-02-23 04:38 Ulrich Drepper * stdlib/strtol.c (STRTOL): It is not illegal to parse a minus sign in the strtouXX functions. The results gets simply negated. * stdio-common/tstscanf.c: Add testcase for above case. * stdlib/tst-strtol.c: Correct tests. * manual/stdio-fp.c: New file. Generate output for example program in stdio.texi. * stdio-common/Makefile (routines): Add printf_fphex. * stdio-common/vfprintf.c: Add handling of %a and %A specifier. * stdio-common/printf_fphex.c: New file. Implement %a and %A specifier. 1997-02-22 03:01 Ulrich Drepper * sysdeps/unix/sysv/linux/timebits.h (CLK_TCK): Don't defined if __STRICT_ANSI__. * math/math.h: Prevent definition of struct exception when using C++. 1997-02-22 01:45 Ulrich Drepper * sysdeps/unix/syscalls.list: Dup takes only one argument. Reported by Greg McGary. 1997-02-21 00:22 Miles Bader 1997-02-20 01:28 Miles Bader 1997-02-19 13:56 Miles Bader 1997-02-18 15:39 Miles Bader 1997-02-17 10:58 Miles Bader 1997-02-15 10:23 Miles Bader (mutex_lock, mutex_unlock, mutex_trylock): Defined in terms of __mutex_*. (mutex_t): Type removed & replaced by new macro. (tsd_key_t): Typedef to int instead of pthread_key_t. (tsd_key_create, tsd_setspecific, tsd_getspecific): New macros. (__pthread_initialize): New macro, work around assumption of pthreads. * sysdeps/mach/hurd/i386/init-first.c (__libc_argv, __libc_argc): __hurd_sigthread_stack_end, __hurd_sigthread_stack_variables, __hurd_threadvar_max, __hurd_threadvar_stack_offset, __hurd_threadvar_stack_mask): Variables removed. 1997-02-14 14:07 Miles Bader * hurd/hurd.h (_hurd_pids_changed_stamp, _hurd_pids_changed_sync): 1997-02-24 17:06 Geoffrey Keating * sysdeps/unix/sysv/linux/accept.S (NARGS): Describe number of arguments taken, for sysdeps/unix/sysv/linux/powerpc/socket.S. * sysdeps/unix/sysv/linux/bind.S: Likewise. * sysdeps/unix/sysv/linux/connect.S: Likewise. * sysdeps/unix/sysv/linux/getpeername.S: Likewise. * sysdeps/unix/sysv/linux/getsockname.S: Likewise. * sysdeps/unix/sysv/linux/getsockopt.S: Likewise. * sysdeps/unix/sysv/linux/listen.S: Likewise. * sysdeps/unix/sysv/linux/recv.S: Likewise. * sysdeps/unix/sysv/linux/recvfrom.S: Likewise. * sysdeps/unix/sysv/linux/recvmsg.S: Likewise. * sysdeps/unix/sysv/linux/send.S: Likewise. * sysdeps/unix/sysv/linux/sendmsg.S: Likewise. * sysdeps/unix/sysv/linux/sendto.S: Likewise. * sysdeps/unix/sysv/linux/setsockopt.S: Likewise. * sysdeps/unix/sysv/linux/shutdown.S: Likewise. * sysdeps/unix/sysv/linux/socketpair.S: Likewise. 1997-02-15 04:51 Ulrich Drepper --- libio/stdio.h | 740 +++++++++++++++++++++++++++++++++++++++++----------------- 1 file changed, 527 insertions(+), 213 deletions(-) (limited to 'libio/stdio.h') 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 */ #ifndef _STDIO_H -#define _STDIO_H + +#if !defined __need_FILE +#define _STDIO_H 1 +#include + +__BEGIN_DECLS + +#define __need_size_t +#define __need_NULL +#include + +#include +#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 -#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 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 +/* 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 + + +/* 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 . */ + +/* 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 /* included. */ #endif /* !_STDIO_H */ -- cgit v1.2.3