diff options
Diffstat (limited to 'libio')
| -rw-r--r-- | libio/clearerr.c | 6 | ||||
| -rw-r--r-- | libio/feof.c | 8 | ||||
| -rw-r--r-- | libio/ferror.c | 5 | ||||
| -rw-r--r-- | libio/fileno.c | 1 | ||||
| -rw-r--r-- | libio/fputc.c | 2 | ||||
| -rw-r--r-- | libio/getc.c | 6 | ||||
| -rw-r--r-- | libio/getchar.c | 6 | ||||
| -rw-r--r-- | libio/iofflush.c | 4 | ||||
| -rw-r--r-- | libio/putc.c | 34 | ||||
| -rw-r--r-- | libio/putchar.c | 34 | ||||
| -rw-r--r-- | libio/stdio.h | 740 |
11 files changed, 556 insertions, 290 deletions
diff --git a/libio/clearerr.c b/libio/clearerr.c index 7c7fb93dc0..4776250ff8 100644 --- a/libio/clearerr.c +++ b/libio/clearerr.c @@ -1,4 +1,4 @@ -/* Copyright (C) 1995, 1996 Free Software Foundation, Inc. +/* Copyright (C) 1995, 1996, 1997 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 @@ -28,7 +28,3 @@ clearerr (fp) _IO_clearerr (fp); _IO_funlockfile (fp); } - -#ifdef _IO_MTSAFE_IO -weak_alias (clearerr, clearerr_locked) -#endif diff --git a/libio/feof.c b/libio/feof.c index 34ca1da161..23674704d6 100644 --- a/libio/feof.c +++ b/libio/feof.c @@ -36,11 +36,3 @@ _IO_feof (fp) return result; } weak_alias (_IO_feof, feof) - -#ifdef _IO_MTSAFE_IO -/* The feof implementation for libio does not require locking because - it only accesses once a single variable and this is already atomic - (at least at thread level). */ - -weak_alias (_IO_feof, feof_locked) -#endif diff --git a/libio/ferror.c b/libio/ferror.c index 4f75092149..b9ed64587c 100644 --- a/libio/ferror.c +++ b/libio/ferror.c @@ -36,8 +36,3 @@ _IO_ferror (fp) return result; } weak_alias (_IO_ferror, ferror) - -#ifdef _IO_MTSAFE_IO - -weak_alias (ferror, ferror_locked) -#endif diff --git a/libio/fileno.c b/libio/fileno.c index 08e657b970..269ecb875a 100644 --- a/libio/fileno.c +++ b/libio/fileno.c @@ -43,5 +43,4 @@ fileno (fp) (at least at thread level). */ weak_alias (fileno, fileno_unlocked) -weak_alias (fileno, fileno_locked) #endif diff --git a/libio/fputc.c b/libio/fputc.c index 89359dc46d..e1f10f1b20 100644 --- a/libio/fputc.c +++ b/libio/fputc.c @@ -38,5 +38,3 @@ fputc (c, fp) _IO_cleanup_region_end (1); return result; } - -weak_alias (fputc, fputc_locked) diff --git a/libio/getc.c b/libio/getc.c index eede63984f..d3e89fcc27 100644 --- a/libio/getc.c +++ b/libio/getc.c @@ -41,9 +41,3 @@ _IO_getc (fp) } #undef getc weak_alias (_IO_getc, getc) - -#ifdef _IO_MTSAFE_IO -# undef getc_locked - -weak_alias (getc, getc_locked) -#endif diff --git a/libio/getchar.c b/libio/getchar.c index aa675591ad..25eb2b10ae 100644 --- a/libio/getchar.c +++ b/libio/getchar.c @@ -37,9 +37,3 @@ getchar () _IO_cleanup_region_end (1); return result; } - -#ifdef _IO_MTSAFE_IO -# undef getchar_locked - -weak_alias (getchar, getchar_locked) -#endif diff --git a/libio/iofflush.c b/libio/iofflush.c index af69486164..96cb49b2dc 100644 --- a/libio/iofflush.c +++ b/libio/iofflush.c @@ -44,7 +44,3 @@ _IO_fflush (fp) } weak_alias (_IO_fflush, fflush) - -#ifdef _IO_MTSAFE_IO -weak_alias (_IO_fflush, fflush_locked) -#endif diff --git a/libio/putc.c b/libio/putc.c index 5aa3b68137..6d84f24995 100644 --- a/libio/putc.c +++ b/libio/putc.c @@ -1,20 +1,20 @@ -/* Copyright (C) 1991, 1995, 1996 Free Software Foundation, Inc. -This file is part of the GNU C Library. +/* Copyright (C) 1991, 1995, 1996, 1997 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 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. + 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. -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., 675 Mass Ave, -Cambridge, MA 02139, 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. */ #include "libioP.h" #include "stdio.h" @@ -36,9 +36,3 @@ _IO_putc (c, fp) } #undef putc weak_alias (_IO_putc, putc) - -#ifdef _IO_MTSAFE_IO -# undef putc_locked - -weak_alias (putc, putc_locked) -#endif diff --git a/libio/putchar.c b/libio/putchar.c index 7822a31a1a..b8a41ebf76 100644 --- a/libio/putchar.c +++ b/libio/putchar.c @@ -1,20 +1,20 @@ -/* Copyright (C) 1991, 1995, 1996 Free Software Foundation, Inc. -This file is part of the GNU C Library. +/* Copyright (C) 1991, 1995, 1996, 1997 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 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. + 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. -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., 675 Mass Ave, -Cambridge, MA 02139, 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. */ #include "libioP.h" #include "stdio.h" @@ -33,9 +33,3 @@ putchar (c) __libc_cleanup_region_end (1); return result; } - -#ifdef _IO_MTSAFE_IO -# undef putchar_locked - -weak_alias (putchar, putchar_locked) -#endif 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 *__restr |
