| @@ -1,492 +1,501 @@ | | | @@ -1,492 +1,501 @@ |
1 | /* $NetBSD: stdio.h,v 1.72 2008/08/04 17:08:49 matt Exp $ */ | | 1 | /* $NetBSD: stdio.h,v 1.73 2008/09/21 16:59:46 christos Exp $ */ |
2 | | | 2 | |
3 | /*- | | 3 | /*- |
4 | * Copyright (c) 1990, 1993 | | 4 | * Copyright (c) 1990, 1993 |
5 | * The Regents of the University of California. All rights reserved. | | 5 | * The Regents of the University of California. All rights reserved. |
6 | * | | 6 | * |
7 | * This code is derived from software contributed to Berkeley by | | 7 | * This code is derived from software contributed to Berkeley by |
8 | * Chris Torek. | | 8 | * Chris Torek. |
9 | * | | 9 | * |
10 | * Redistribution and use in source and binary forms, with or without | | 10 | * Redistribution and use in source and binary forms, with or without |
11 | * modification, are permitted provided that the following conditions | | 11 | * modification, are permitted provided that the following conditions |
12 | * are met: | | 12 | * are met: |
13 | * 1. Redistributions of source code must retain the above copyright | | 13 | * 1. Redistributions of source code must retain the above copyright |
14 | * notice, this list of conditions and the following disclaimer. | | 14 | * notice, this list of conditions and the following disclaimer. |
15 | * 2. Redistributions in binary form must reproduce the above copyright | | 15 | * 2. Redistributions in binary form must reproduce the above copyright |
16 | * notice, this list of conditions and the following disclaimer in the | | 16 | * notice, this list of conditions and the following disclaimer in the |
17 | * documentation and/or other materials provided with the distribution. | | 17 | * documentation and/or other materials provided with the distribution. |
18 | * 3. Neither the name of the University nor the names of its contributors | | 18 | * 3. Neither the name of the University nor the names of its contributors |
19 | * may be used to endorse or promote products derived from this software | | 19 | * may be used to endorse or promote products derived from this software |
20 | * without specific prior written permission. | | 20 | * without specific prior written permission. |
21 | * | | 21 | * |
22 | * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND | | 22 | * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND |
23 | * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE | | 23 | * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE |
24 | * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE | | 24 | * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE |
25 | * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE | | 25 | * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE |
26 | * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL | | 26 | * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL |
27 | * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS | | 27 | * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS |
28 | * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) | | 28 | * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) |
29 | * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT | | 29 | * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT |
30 | * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY | | 30 | * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY |
31 | * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF | | 31 | * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF |
32 | * SUCH DAMAGE. | | 32 | * SUCH DAMAGE. |
33 | * | | 33 | * |
34 | * @(#)stdio.h 8.5 (Berkeley) 4/29/95 | | 34 | * @(#)stdio.h 8.5 (Berkeley) 4/29/95 |
35 | */ | | 35 | */ |
36 | | | 36 | |
37 | #ifndef _STDIO_H_ | | 37 | #ifndef _STDIO_H_ |
38 | #define _STDIO_H_ | | 38 | #define _STDIO_H_ |
39 | | | 39 | |
40 | #include <sys/cdefs.h> | | 40 | #include <sys/cdefs.h> |
41 | #include <sys/featuretest.h> | | 41 | #include <sys/featuretest.h> |
42 | #include <sys/ansi.h> | | 42 | #include <sys/ansi.h> |
43 | | | 43 | |
44 | #include <machine/ansi.h> | | 44 | #include <machine/ansi.h> |
45 | #ifdef _BSD_SIZE_T_ | | 45 | #ifdef _BSD_SIZE_T_ |
46 | typedef _BSD_SIZE_T_ size_t; | | 46 | typedef _BSD_SIZE_T_ size_t; |
47 | #undef _BSD_SIZE_T_ | | 47 | #undef _BSD_SIZE_T_ |
48 | #endif | | 48 | #endif |
49 | | | 49 | |
50 | #include <sys/null.h> | | 50 | #include <sys/null.h> |
51 | | | 51 | |
52 | /* | | 52 | /* |
53 | * This is fairly grotesque, but pure ANSI code must not inspect the | | 53 | * This is fairly grotesque, but pure ANSI code must not inspect the |
54 | * innards of an fpos_t anyway. The library internally uses off_t, | | 54 | * innards of an fpos_t anyway. The library internally uses off_t, |
55 | * which we assume is exactly as big as eight chars. | | 55 | * which we assume is exactly as big as eight chars. |
56 | */ | | 56 | */ |
57 | #if (!defined(_ANSI_SOURCE) && !defined(__STRICT_ANSI__)) || defined(_LIBC) | | 57 | #if (!defined(_ANSI_SOURCE) && !defined(__STRICT_ANSI__)) || defined(_LIBC) |
58 | typedef __off_t fpos_t; | | 58 | typedef __off_t fpos_t; |
59 | #else | | 59 | #else |
60 | typedef struct __sfpos { | | 60 | typedef struct __sfpos { |
61 | __off_t _pos; | | 61 | __off_t _pos; |
62 | } fpos_t; | | 62 | } fpos_t; |
63 | #endif | | 63 | #endif |
64 | | | 64 | |
65 | #define _FSTDIO /* Define for new stdio with functions. */ | | 65 | #define _FSTDIO /* Define for new stdio with functions. */ |
66 | | | 66 | |
67 | /* | | 67 | /* |
68 | * NB: to fit things in six character monocase externals, the stdio | | 68 | * NB: to fit things in six character monocase externals, the stdio |
69 | * code uses the prefix `__s' for stdio objects, typically followed | | 69 | * code uses the prefix `__s' for stdio objects, typically followed |
70 | * by a three-character attempt at a mnemonic. | | 70 | * by a three-character attempt at a mnemonic. |
71 | */ | | 71 | */ |
72 | | | 72 | |
73 | /* stdio buffers */ | | 73 | /* stdio buffers */ |
74 | struct __sbuf { | | 74 | struct __sbuf { |
75 | unsigned char *_base; | | 75 | unsigned char *_base; |
76 | int _size; | | 76 | int _size; |
77 | }; | | 77 | }; |
78 | | | 78 | |
79 | /* | | 79 | /* |
80 | * stdio state variables. | | 80 | * stdio state variables. |
81 | * | | 81 | * |
82 | * The following always hold: | | 82 | * The following always hold: |
83 | * | | 83 | * |
84 | * if (_flags&(__SLBF|__SWR)) == (__SLBF|__SWR), | | 84 | * if (_flags&(__SLBF|__SWR)) == (__SLBF|__SWR), |
85 | * _lbfsize is -_bf._size, else _lbfsize is 0 | | 85 | * _lbfsize is -_bf._size, else _lbfsize is 0 |
86 | * if _flags&__SRD, _w is 0 | | 86 | * if _flags&__SRD, _w is 0 |
87 | * if _flags&__SWR, _r is 0 | | 87 | * if _flags&__SWR, _r is 0 |
88 | * | | 88 | * |
89 | * This ensures that the getc and putc macros (or inline functions) never | | 89 | * This ensures that the getc and putc macros (or inline functions) never |
90 | * try to write or read from a file that is in `read' or `write' mode. | | 90 | * try to write or read from a file that is in `read' or `write' mode. |
91 | * (Moreover, they can, and do, automatically switch from read mode to | | 91 | * (Moreover, they can, and do, automatically switch from read mode to |
92 | * write mode, and back, on "r+" and "w+" files.) | | 92 | * write mode, and back, on "r+" and "w+" files.) |
93 | * | | 93 | * |
94 | * _lbfsize is used only to make the inline line-buffered output stream | | 94 | * _lbfsize is used only to make the inline line-buffered output stream |
95 | * code as compact as possible. | | 95 | * code as compact as possible. |
96 | * | | 96 | * |
97 | * _ub, _up, and _ur are used when ungetc() pushes back more characters | | 97 | * _ub, _up, and _ur are used when ungetc() pushes back more characters |
98 | * than fit in the current _bf, or when ungetc() pushes back a character | | 98 | * than fit in the current _bf, or when ungetc() pushes back a character |
99 | * that does not match the previous one in _bf. When this happens, | | 99 | * that does not match the previous one in _bf. When this happens, |
100 | * _ub._base becomes non-nil (i.e., a stream has ungetc() data iff | | 100 | * _ub._base becomes non-nil (i.e., a stream has ungetc() data iff |
101 | * _ub._base!=NULL) and _up and _ur save the current values of _p and _r. | | 101 | * _ub._base!=NULL) and _up and _ur save the current values of _p and _r. |
102 | * | | 102 | * |
103 | * NB: see WARNING above before changing the layout of this structure! | | 103 | * NB: see WARNING above before changing the layout of this structure! |
104 | */ | | 104 | */ |
105 | typedef struct __sFILE { | | 105 | typedef struct __sFILE { |
106 | unsigned char *_p; /* current position in (some) buffer */ | | 106 | unsigned char *_p; /* current position in (some) buffer */ |
107 | int _r; /* read space left for getc() */ | | 107 | int _r; /* read space left for getc() */ |
108 | int _w; /* write space left for putc() */ | | 108 | int _w; /* write space left for putc() */ |
109 | unsigned short _flags; /* flags, below; this FILE is free if 0 */ | | 109 | unsigned short _flags; /* flags, below; this FILE is free if 0 */ |
110 | short _file; /* fileno, if Unix descriptor, else -1 */ | | 110 | short _file; /* fileno, if Unix descriptor, else -1 */ |
111 | struct __sbuf _bf; /* the buffer (at least 1 byte, if !NULL) */ | | 111 | struct __sbuf _bf; /* the buffer (at least 1 byte, if !NULL) */ |
112 | int _lbfsize; /* 0 or -_bf._size, for inline putc */ | | 112 | int _lbfsize; /* 0 or -_bf._size, for inline putc */ |
113 | | | 113 | |
114 | /* operations */ | | 114 | /* operations */ |
115 | void *_cookie; /* cookie passed to io functions */ | | 115 | void *_cookie; /* cookie passed to io functions */ |
116 | int (*_close)(void *); | | 116 | int (*_close)(void *); |
117 | int (*_read) (void *, char *, int); | | 117 | int (*_read) (void *, char *, int); |
118 | fpos_t (*_seek) (void *, fpos_t, int); | | 118 | fpos_t (*_seek) (void *, fpos_t, int); |
119 | int (*_write)(void *, const char *, int); | | 119 | int (*_write)(void *, const char *, int); |
120 | | | 120 | |
121 | /* file extension */ | | 121 | /* file extension */ |
122 | struct __sbuf _ext; | | 122 | struct __sbuf _ext; |
123 | | | 123 | |
124 | /* separate buffer for long sequences of ungetc() */ | | 124 | /* separate buffer for long sequences of ungetc() */ |
125 | unsigned char *_up; /* saved _p when _p is doing ungetc data */ | | 125 | unsigned char *_up; /* saved _p when _p is doing ungetc data */ |
126 | int _ur; /* saved _r when _r is counting ungetc data */ | | 126 | int _ur; /* saved _r when _r is counting ungetc data */ |
127 | | | 127 | |
128 | /* tricks to meet minimum requirements even when malloc() fails */ | | 128 | /* tricks to meet minimum requirements even when malloc() fails */ |
129 | unsigned char _ubuf[3]; /* guarantee an ungetc() buffer */ | | 129 | unsigned char _ubuf[3]; /* guarantee an ungetc() buffer */ |
130 | unsigned char _nbuf[1]; /* guarantee a getc() buffer */ | | 130 | unsigned char _nbuf[1]; /* guarantee a getc() buffer */ |
131 | | | 131 | |
132 | /* separate buffer for fgetln() when line crosses buffer boundary */ | | 132 | /* separate buffer for fgetln() when line crosses buffer boundary */ |
133 | struct __sbuf _lb; /* buffer for fgetln() */ | | 133 | struct __sbuf _lb; /* buffer for fgetln() */ |
134 | | | 134 | |
135 | /* Unix stdio files get aligned to block boundaries on fseek() */ | | 135 | /* Unix stdio files get aligned to block boundaries on fseek() */ |
136 | int _blksize; /* stat.st_blksize (may be != _bf._size) */ | | 136 | int _blksize; /* stat.st_blksize (may be != _bf._size) */ |
137 | fpos_t _offset; /* current lseek offset */ | | 137 | fpos_t _offset; /* current lseek offset */ |
138 | } FILE; | | 138 | } FILE; |
139 | | | 139 | |
140 | __BEGIN_DECLS | | 140 | __BEGIN_DECLS |
141 | extern FILE __sF[]; | | 141 | extern FILE __sF[]; |
142 | __END_DECLS | | 142 | __END_DECLS |
143 | | | 143 | |
144 | #define __SLBF 0x0001 /* line buffered */ | | 144 | #define __SLBF 0x0001 /* line buffered */ |
145 | #define __SNBF 0x0002 /* unbuffered */ | | 145 | #define __SNBF 0x0002 /* unbuffered */ |
146 | #define __SRD 0x0004 /* OK to read */ | | 146 | #define __SRD 0x0004 /* OK to read */ |
147 | #define __SWR 0x0008 /* OK to write */ | | 147 | #define __SWR 0x0008 /* OK to write */ |
148 | /* RD and WR are never simultaneously asserted */ | | 148 | /* RD and WR are never simultaneously asserted */ |
149 | #define __SRW 0x0010 /* open for reading & writing */ | | 149 | #define __SRW 0x0010 /* open for reading & writing */ |
150 | #define __SEOF 0x0020 /* found EOF */ | | 150 | #define __SEOF 0x0020 /* found EOF */ |
151 | #define __SERR 0x0040 /* found error */ | | 151 | #define __SERR 0x0040 /* found error */ |
152 | #define __SMBF 0x0080 /* _buf is from malloc */ | | 152 | #define __SMBF 0x0080 /* _buf is from malloc */ |
153 | #define __SAPP 0x0100 /* fdopen()ed in append mode */ | | 153 | #define __SAPP 0x0100 /* fdopen()ed in append mode */ |
154 | #define __SSTR 0x0200 /* this is an sprintf/snprintf string */ | | 154 | #define __SSTR 0x0200 /* this is an sprintf/snprintf string */ |
155 | #define __SOPT 0x0400 /* do fseek() optimization */ | | 155 | #define __SOPT 0x0400 /* do fseek() optimization */ |
156 | #define __SNPT 0x0800 /* do not do fseek() optimization */ | | 156 | #define __SNPT 0x0800 /* do not do fseek() optimization */ |
157 | #define __SOFF 0x1000 /* set iff _offset is in fact correct */ | | 157 | #define __SOFF 0x1000 /* set iff _offset is in fact correct */ |
158 | #define __SMOD 0x2000 /* true => fgetln modified _p text */ | | 158 | #define __SMOD 0x2000 /* true => fgetln modified _p text */ |
159 | #define __SALC 0x4000 /* allocate string space dynamically */ | | 159 | #define __SALC 0x4000 /* allocate string space dynamically */ |
160 | | | 160 | |
161 | /* | | 161 | /* |
162 | * The following three definitions are for ANSI C, which took them | | 162 | * The following three definitions are for ANSI C, which took them |
163 | * from System V, which brilliantly took internal interface macros and | | 163 | * from System V, which brilliantly took internal interface macros and |
164 | * made them official arguments to setvbuf(), without renaming them. | | 164 | * made them official arguments to setvbuf(), without renaming them. |
165 | * Hence, these ugly _IOxxx names are *supposed* to appear in user code. | | 165 | * Hence, these ugly _IOxxx names are *supposed* to appear in user code. |
166 | * | | 166 | * |
167 | * Although numbered as their counterparts above, the implementation | | 167 | * Although numbered as their counterparts above, the implementation |
168 | * does not rely on this. | | 168 | * does not rely on this. |
169 | */ | | 169 | */ |
170 | #define _IOFBF 0 /* setvbuf should set fully buffered */ | | 170 | #define _IOFBF 0 /* setvbuf should set fully buffered */ |
171 | #define _IOLBF 1 /* setvbuf should set line buffered */ | | 171 | #define _IOLBF 1 /* setvbuf should set line buffered */ |
172 | #define _IONBF 2 /* setvbuf should set unbuffered */ | | 172 | #define _IONBF 2 /* setvbuf should set unbuffered */ |
173 | | | 173 | |
174 | #define BUFSIZ 1024 /* size of buffer used by setbuf */ | | 174 | #define BUFSIZ 1024 /* size of buffer used by setbuf */ |
175 | #define EOF (-1) | | 175 | #define EOF (-1) |
176 | | | 176 | |
177 | /* | | 177 | /* |
178 | * FOPEN_MAX is a minimum maximum, and is the number of streams that | | 178 | * FOPEN_MAX is a minimum maximum, and is the number of streams that |
179 | * stdio can provide without attempting to allocate further resources | | 179 | * stdio can provide without attempting to allocate further resources |
180 | * (which could fail). Do not use this for anything. | | 180 | * (which could fail). Do not use this for anything. |
181 | */ | | 181 | */ |
182 | /* must be == _POSIX_STREAM_MAX <limits.h> */ | | 182 | /* must be == _POSIX_STREAM_MAX <limits.h> */ |
183 | #define FOPEN_MAX 20 /* must be <= OPEN_MAX <sys/syslimits.h> */ | | 183 | #define FOPEN_MAX 20 /* must be <= OPEN_MAX <sys/syslimits.h> */ |
184 | #define FILENAME_MAX 1024 /* must be <= PATH_MAX <sys/syslimits.h> */ | | 184 | #define FILENAME_MAX 1024 /* must be <= PATH_MAX <sys/syslimits.h> */ |
185 | | | 185 | |
186 | /* System V/ANSI C; this is the wrong way to do this, do *not* use these. */ | | 186 | /* System V/ANSI C; this is the wrong way to do this, do *not* use these. */ |
187 | #if defined(_XOPEN_SOURCE) || defined(_NETBSD_SOURCE) | | 187 | #if defined(_XOPEN_SOURCE) || defined(_NETBSD_SOURCE) |
188 | #define P_tmpdir "/var/tmp/" | | 188 | #define P_tmpdir "/var/tmp/" |
189 | #endif | | 189 | #endif |
190 | #define L_tmpnam 1024 /* XXX must be == PATH_MAX */ | | 190 | #define L_tmpnam 1024 /* XXX must be == PATH_MAX */ |
191 | /* Always ensure that this is consistent with <limits.h> */ | | 191 | /* Always ensure that this is consistent with <limits.h> */ |
192 | #ifndef TMP_MAX | | 192 | #ifndef TMP_MAX |
193 | #define TMP_MAX 308915776 /* Legacy */ | | 193 | #define TMP_MAX 308915776 /* Legacy */ |
194 | #endif | | 194 | #endif |
195 | | | 195 | |
196 | /* Always ensure that these are consistent with <fcntl.h> and <unistd.h>! */ | | 196 | /* Always ensure that these are consistent with <fcntl.h> and <unistd.h>! */ |
197 | #ifndef SEEK_SET | | 197 | #ifndef SEEK_SET |
198 | #define SEEK_SET 0 /* set file offset to offset */ | | 198 | #define SEEK_SET 0 /* set file offset to offset */ |
199 | #endif | | 199 | #endif |
200 | #ifndef SEEK_CUR | | 200 | #ifndef SEEK_CUR |
201 | #define SEEK_CUR 1 /* set file offset to current plus offset */ | | 201 | #define SEEK_CUR 1 /* set file offset to current plus offset */ |
202 | #endif | | 202 | #endif |
203 | #ifndef SEEK_END | | 203 | #ifndef SEEK_END |
204 | #define SEEK_END 2 /* set file offset to EOF plus offset */ | | 204 | #define SEEK_END 2 /* set file offset to EOF plus offset */ |
205 | #endif | | 205 | #endif |
206 | | | 206 | |
207 | #define stdin (&__sF[0]) | | 207 | #define stdin (&__sF[0]) |
208 | #define stdout (&__sF[1]) | | 208 | #define stdout (&__sF[1]) |
209 | #define stderr (&__sF[2]) | | 209 | #define stderr (&__sF[2]) |
210 | | | 210 | |
211 | /* | | 211 | /* |
212 | * Functions defined in ANSI C standard. | | 212 | * Functions defined in ANSI C standard. |
213 | */ | | 213 | */ |
214 | __BEGIN_DECLS | | 214 | __BEGIN_DECLS |
215 | void clearerr(FILE *); | | 215 | void clearerr(FILE *); |
216 | int fclose(FILE *); | | 216 | int fclose(FILE *); |
217 | int feof(FILE *); | | 217 | int feof(FILE *); |
218 | int ferror(FILE *); | | 218 | int ferror(FILE *); |
219 | int fflush(FILE *); | | 219 | int fflush(FILE *); |
220 | int fgetc(FILE *); | | 220 | int fgetc(FILE *); |
221 | int fgetpos(FILE * __restrict, fpos_t * __restrict); | | 221 | int fgetpos(FILE * __restrict, fpos_t * __restrict); |
222 | char *fgets(char * __restrict, int, FILE * __restrict); | | 222 | char *fgets(char * __restrict, int, FILE * __restrict); |
223 | FILE *fopen(const char * __restrict , const char * __restrict); | | 223 | FILE *fopen(const char * __restrict , const char * __restrict); |
224 | int fprintf(FILE * __restrict , const char * __restrict, ...); | | 224 | int fprintf(FILE * __restrict , const char * __restrict, ...) |
| | | 225 | __attribute__((__format__(__printf__, 2, 3))); |
225 | int fputc(int, FILE *); | | 226 | int fputc(int, FILE *); |
226 | int fputs(const char * __restrict, FILE * __restrict); | | 227 | int fputs(const char * __restrict, FILE * __restrict); |
227 | size_t fread(void * __restrict, size_t, size_t, FILE * __restrict); | | 228 | size_t fread(void * __restrict, size_t, size_t, FILE * __restrict); |
228 | FILE *freopen(const char * __restrict, const char * __restrict, | | 229 | FILE *freopen(const char * __restrict, const char * __restrict, |
229 | FILE * __restrict); | | 230 | FILE * __restrict); |
230 | int fscanf(FILE * __restrict, const char * __restrict, ...); | | 231 | int fscanf(FILE * __restrict, const char * __restrict, ...) |
| | | 232 | __attribute__((__format__(__scanf__, 2, 3))); |
231 | int fseek(FILE *, long, int); | | 233 | int fseek(FILE *, long, int); |
232 | int fsetpos(FILE *, const fpos_t *); | | 234 | int fsetpos(FILE *, const fpos_t *); |
233 | long ftell(FILE *); | | 235 | long ftell(FILE *); |
234 | size_t fwrite(const void * __restrict, size_t, size_t, FILE * __restrict); | | 236 | size_t fwrite(const void * __restrict, size_t, size_t, FILE * __restrict); |
235 | int getc(FILE *); | | 237 | int getc(FILE *); |
236 | int getchar(void); | | 238 | int getchar(void); |
237 | void perror(const char *); | | 239 | void perror(const char *); |
238 | int printf(const char * __restrict, ...); | | 240 | int printf(const char * __restrict, ...) |
| | | 241 | __attribute__((__format__(__printf__, 1, 2))); |
239 | int putc(int, FILE *); | | 242 | int putc(int, FILE *); |
240 | int putchar(int); | | 243 | int putchar(int); |
241 | int puts(const char *); | | 244 | int puts(const char *); |
242 | int remove(const char *); | | 245 | int remove(const char *); |
243 | void rewind(FILE *); | | 246 | void rewind(FILE *); |
244 | int scanf(const char * __restrict, ...); | | 247 | int scanf(const char * __restrict, ...) |
| | | 248 | __attribute__((__format__(__scanf__, 1, 2))); |
245 | void setbuf(FILE * __restrict, char * __restrict); | | 249 | void setbuf(FILE * __restrict, char * __restrict); |
246 | int setvbuf(FILE * __restrict, char * __restrict, int, size_t); | | 250 | int setvbuf(FILE * __restrict, char * __restrict, int, size_t); |
247 | int sscanf(const char * __restrict, const char * __restrict, ...); | | 251 | int sscanf(const char * __restrict, const char * __restrict, ...) |
| | | 252 | __attribute__((__format__(__scanf__, 2, 3))); |
248 | FILE *tmpfile(void); | | 253 | FILE *tmpfile(void); |
249 | int ungetc(int, FILE *); | | 254 | int ungetc(int, FILE *); |
250 | int vfprintf(FILE * __restrict, const char * __restrict, _BSD_VA_LIST_); | | 255 | int vfprintf(FILE * __restrict, const char * __restrict, _BSD_VA_LIST_) |
251 | int vprintf(const char * __restrict, _BSD_VA_LIST_); | | 256 | __attribute__((__format__(__printf__, 2, 0))); |
| | | 257 | int vprintf(const char * __restrict, _BSD_VA_LIST_) |
| | | 258 | __attribute__((__format__(__printf__, 1, 0))); |
252 | | | 259 | |
253 | #ifndef __AUDIT__ | | 260 | #ifndef __AUDIT__ |
254 | char *gets(char *); | | 261 | char *gets(char *); |
255 | int sprintf(char * __restrict, const char * __restrict, ...); | | 262 | int sprintf(char * __restrict, const char * __restrict, ...) |
| | | 263 | __attribute__((__format__(__printf__, 2, 3))); |
256 | char *tmpnam(char *); | | 264 | char *tmpnam(char *); |
257 | int vsprintf(char * __restrict, const char * __restrict, | | 265 | int vsprintf(char * __restrict, const char * __restrict, |
258 | _BSD_VA_LIST_); | | 266 | _BSD_VA_LIST_) |
| | | 267 | __attribute__((__format__(__printf__, 2, 0))); |
259 | #endif | | 268 | #endif |
260 | | | 269 | |
261 | #if defined(_POSIX_C_SOURCE) || defined(_XOPEN_SOURCE) | | 270 | #if defined(_POSIX_C_SOURCE) || defined(_XOPEN_SOURCE) |
262 | int rename (const char *, const char *) __RENAME(__posix_rename); | | 271 | int rename (const char *, const char *) __RENAME(__posix_rename); |
263 | #else | | 272 | #else |
264 | int rename (const char *, const char *); | | 273 | int rename (const char *, const char *); |
265 | #endif | | 274 | #endif |
266 | __END_DECLS | | 275 | __END_DECLS |
267 | | | 276 | |
268 | /* | | 277 | /* |
269 | * IEEE Std 1003.1-90 | | 278 | * IEEE Std 1003.1-90 |
270 | */ | | 279 | */ |
271 | #if defined(_POSIX_C_SOURCE) || defined(_XOPEN_SOURCE) || \ | | 280 | #if defined(_POSIX_C_SOURCE) || defined(_XOPEN_SOURCE) || \ |
272 | defined(_NETBSD_SOURCE) | | 281 | defined(_NETBSD_SOURCE) |
273 | #define L_ctermid 1024 /* size for ctermid(); PATH_MAX */ | | 282 | #define L_ctermid 1024 /* size for ctermid(); PATH_MAX */ |
274 | #define L_cuserid 9 /* size for cuserid(); UT_NAMESIZE + 1 */ | | 283 | #define L_cuserid 9 /* size for cuserid(); UT_NAMESIZE + 1 */ |
275 | | | 284 | |
276 | __BEGIN_DECLS | | 285 | __BEGIN_DECLS |
277 | char *ctermid(char *); | | 286 | char *ctermid(char *); |
278 | #ifndef __CUSERID_DECLARED | | 287 | #ifndef __CUSERID_DECLARED |
279 | #define __CUSERID_DECLARED | | 288 | #define __CUSERID_DECLARED |
280 | /* also declared in unistd.h */ | | 289 | /* also declared in unistd.h */ |
281 | char *cuserid(char *); | | 290 | char *cuserid(char *); |
282 | #endif /* __CUSERID_DECLARED */ | | 291 | #endif /* __CUSERID_DECLARED */ |
283 | FILE *fdopen(int, const char *); | | 292 | FILE *fdopen(int, const char *); |
284 | int fileno(FILE *); | | 293 | int fileno(FILE *); |
285 | __END_DECLS | | 294 | __END_DECLS |
286 | #endif /* not ANSI */ | | 295 | #endif /* not ANSI */ |
287 | | | 296 | |
288 | /* | | 297 | /* |
289 | * IEEE Std 1003.1c-95, also adopted by X/Open CAE Spec Issue 5 Version 2 | | 298 | * IEEE Std 1003.1c-95, also adopted by X/Open CAE Spec Issue 5 Version 2 |
290 | */ | | 299 | */ |
291 | #if (_POSIX_C_SOURCE - 0) >= 199506L || (_XOPEN_SOURCE - 0) >= 500 || \ | | 300 | #if (_POSIX_C_SOURCE - 0) >= 199506L || (_XOPEN_SOURCE - 0) >= 500 || \ |
292 | defined(_REENTRANT) || defined(_NETBSD_SOURCE) | | 301 | defined(_REENTRANT) || defined(_NETBSD_SOURCE) |
293 | __BEGIN_DECLS | | 302 | __BEGIN_DECLS |
294 | void flockfile(FILE *); | | 303 | void flockfile(FILE *); |
295 | int ftrylockfile(FILE *); | | 304 | int ftrylockfile(FILE *); |
296 | void funlockfile(FILE *); | | 305 | void funlockfile(FILE *); |
297 | int getc_unlocked(FILE *); | | 306 | int getc_unlocked(FILE *); |
298 | int getchar_unlocked(void); | | 307 | int getchar_unlocked(void); |
299 | int putc_unlocked(int, FILE *); | | 308 | int putc_unlocked(int, FILE *); |
300 | int putchar_unlocked(int); | | 309 | int putchar_unlocked(int); |
301 | __END_DECLS | | 310 | __END_DECLS |
302 | #endif /* _POSIX_C_SOURCE >= 1995056 || _XOPEN_SOURCE >= 500 || ... */ | | 311 | #endif /* _POSIX_C_SOURCE >= 1995056 || _XOPEN_SOURCE >= 500 || ... */ |
303 | | | 312 | |
304 | /* | | 313 | /* |
305 | * Functions defined in POSIX 1003.2 and XPG2 or later. | | 314 | * Functions defined in POSIX 1003.2 and XPG2 or later. |
306 | */ | | 315 | */ |
307 | #if (_POSIX_C_SOURCE - 0) >= 2 || (_XOPEN_SOURCE - 0) >= 2 || \ | | 316 | #if (_POSIX_C_SOURCE - 0) >= 2 || (_XOPEN_SOURCE - 0) >= 2 || \ |
308 | defined(_NETBSD_SOURCE) | | 317 | defined(_NETBSD_SOURCE) |
309 | __BEGIN_DECLS | | 318 | __BEGIN_DECLS |
310 | int pclose(FILE *); | | 319 | int pclose(FILE *); |
311 | FILE *popen(const char *, const char *); | | 320 | FILE *popen(const char *, const char *); |
312 | __END_DECLS | | 321 | __END_DECLS |
313 | #endif | | 322 | #endif |
314 | | | 323 | |
315 | /* | | 324 | /* |
316 | * Functions defined in ISO XPG4.2, ISO C99, POSIX 1003.1-2001 or later. | | 325 | * Functions defined in ISO XPG4.2, ISO C99, POSIX 1003.1-2001 or later. |
317 | */ | | 326 | */ |
318 | #if ((__STDC_VERSION__ - 0) >= 199901L) || \ | | 327 | #if ((__STDC_VERSION__ - 0) >= 199901L) || \ |
319 | ((_POSIX_C_SOURCE - 0) >= 200112L) || \ | | 328 | ((_POSIX_C_SOURCE - 0) >= 200112L) || \ |
320 | (defined(_XOPEN_SOURCE) && defined(_XOPEN_SOURCE_EXTENDED)) || \ | | 329 | (defined(_XOPEN_SOURCE) && defined(_XOPEN_SOURCE_EXTENDED)) || \ |
321 | ((_XOPEN_SOURCE - 0) >= 500) || \ | | 330 | ((_XOPEN_SOURCE - 0) >= 500) || \ |
322 | defined(_ISOC99_SOURCE) || defined(_NETBSD_SOURCE) | | 331 | defined(_ISOC99_SOURCE) || defined(_NETBSD_SOURCE) |
323 | __BEGIN_DECLS | | 332 | __BEGIN_DECLS |
324 | int snprintf(char * __restrict, size_t, const char * __restrict, ...) | | 333 | int snprintf(char * __restrict, size_t, const char * __restrict, ...) |
325 | __attribute__((__format__(__printf__, 3, 4))); | | 334 | __attribute__((__format__(__printf__, 3, 4))); |
326 | int vsnprintf(char * __restrict, size_t, const char * __restrict, | | 335 | int vsnprintf(char * __restrict, size_t, const char * __restrict, |
327 | _BSD_VA_LIST_) | | 336 | _BSD_VA_LIST_) |
328 | __attribute__((__format__(__printf__, 3, 0))); | | 337 | __attribute__((__format__(__printf__, 3, 0))); |
329 | __END_DECLS | | 338 | __END_DECLS |
330 | #endif | | 339 | #endif |
331 | | | 340 | |
332 | /* | | 341 | /* |
333 | * Functions defined in XPG4.2. | | 342 | * Functions defined in XPG4.2. |
334 | */ | | 343 | */ |
335 | #if defined(_XOPEN_SOURCE) || defined(_NETBSD_SOURCE) | | 344 | #if defined(_XOPEN_SOURCE) || defined(_NETBSD_SOURCE) |
336 | __BEGIN_DECLS | | 345 | __BEGIN_DECLS |
337 | int getw(FILE *); | | 346 | int getw(FILE *); |
338 | int putw(int, FILE *); | | 347 | int putw(int, FILE *); |
339 | | | 348 | |
340 | #ifndef __AUDIT__ | | 349 | #ifndef __AUDIT__ |
341 | char *tempnam(const char *, const char *); | | 350 | char *tempnam(const char *, const char *); |
342 | #endif | | 351 | #endif |
343 | __END_DECLS | | 352 | __END_DECLS |
344 | #endif | | 353 | #endif |
345 | | | 354 | |
346 | /* | | 355 | /* |
347 | * X/Open CAE Specification Issue 5 Version 2 | | 356 | * X/Open CAE Specification Issue 5 Version 2 |
348 | */ | | 357 | */ |
349 | #if (_XOPEN_SOURCE - 0) >= 500 || defined(_LARGEFILE_SOURCE) || \ | | 358 | #if (_XOPEN_SOURCE - 0) >= 500 || defined(_LARGEFILE_SOURCE) || \ |
350 | defined(_NETBSD_SOURCE) | | 359 | defined(_NETBSD_SOURCE) |
351 | #ifndef off_t | | 360 | #ifndef off_t |
352 | typedef __off_t off_t; | | 361 | typedef __off_t off_t; |
353 | #define off_t __off_t | | 362 | #define off_t __off_t |
354 | #endif /* off_t */ | | 363 | #endif /* off_t */ |
355 | | | 364 | |
356 | __BEGIN_DECLS | | 365 | __BEGIN_DECLS |
357 | int fseeko(FILE *, off_t, int); | | 366 | int fseeko(FILE *, off_t, int); |
358 | off_t ftello(FILE *); | | 367 | off_t ftello(FILE *); |
359 | __END_DECLS | | 368 | __END_DECLS |
360 | #endif /* _XOPEN_SOURCE >= 500 || _LARGEFILE_SOURCE || _NETBSD_SOURCE */ | | 369 | #endif /* _XOPEN_SOURCE >= 500 || _LARGEFILE_SOURCE || _NETBSD_SOURCE */ |
361 | | | 370 | |
362 | /* | | 371 | /* |
363 | * Functions defined in ISO C99. Still put under _NETBSD_SOURCE due to | | 372 | * Functions defined in ISO C99. Still put under _NETBSD_SOURCE due to |
364 | * backward compatible. | | 373 | * backward compatible. |
365 | */ | | 374 | */ |
366 | #if defined(_ISOC99_SOURCE) || defined(_NETBSD_SOURCE) | | 375 | #if defined(_ISOC99_SOURCE) || defined(_NETBSD_SOURCE) |
367 | __BEGIN_DECLS | | 376 | __BEGIN_DECLS |
368 | int vscanf(const char * __restrict, _BSD_VA_LIST_) | | 377 | int vscanf(const char * __restrict, _BSD_VA_LIST_) |
369 | __attribute__((__format__(__scanf__, 1, 0))); | | 378 | __attribute__((__format__(__scanf__, 1, 0))); |
370 | int vfscanf(FILE * __restrict, const char * __restrict, _BSD_VA_LIST_) | | 379 | int vfscanf(FILE * __restrict, const char * __restrict, _BSD_VA_LIST_) |
371 | __attribute__((__format__(__scanf__, 2, 0))); | | 380 | __attribute__((__format__(__scanf__, 2, 0))); |
372 | int vsscanf(const char * __restrict, const char * __restrict, | | 381 | int vsscanf(const char * __restrict, const char * __restrict, |
373 | _BSD_VA_LIST_) | | 382 | _BSD_VA_LIST_) |
374 | __attribute__((__format__(__scanf__, 2, 0))); | | 383 | __attribute__((__format__(__scanf__, 2, 0))); |
375 | __END_DECLS | | 384 | __END_DECLS |
376 | #endif /* _ISOC99_SOURCE || _NETBSD_SOURCE */ | | 385 | #endif /* _ISOC99_SOURCE || _NETBSD_SOURCE */ |
377 | | | 386 | |
378 | /* | | 387 | /* |
379 | * Routines that are purely local. | | 388 | * Routines that are purely local. |
380 | */ | | 389 | */ |
381 | #if defined(_NETBSD_SOURCE) | | 390 | #if defined(_NETBSD_SOURCE) |
382 | | | 391 | |
383 | #define FPARSELN_UNESCESC 0x01 | | 392 | #define FPARSELN_UNESCESC 0x01 |
384 | #define FPARSELN_UNESCCONT 0x02 | | 393 | #define FPARSELN_UNESCCONT 0x02 |
385 | #define FPARSELN_UNESCCOMM 0x04 | | 394 | #define FPARSELN_UNESCCOMM 0x04 |
386 | #define FPARSELN_UNESCREST 0x08 | | 395 | #define FPARSELN_UNESCREST 0x08 |
387 | #define FPARSELN_UNESCALL 0x0f | | 396 | #define FPARSELN_UNESCALL 0x0f |
388 | | | 397 | |
389 | __BEGIN_DECLS | | 398 | __BEGIN_DECLS |
390 | int asprintf(char ** __restrict, const char * __restrict, ...) | | 399 | int asprintf(char ** __restrict, const char * __restrict, ...) |
391 | __attribute__((__format__(__printf__, 2, 3))); | | 400 | __attribute__((__format__(__printf__, 2, 3))); |
392 | char *fgetln(FILE * __restrict, size_t * __restrict); | | 401 | char *fgetln(FILE * __restrict, size_t * __restrict); |
393 | char *fparseln(FILE *, size_t *, size_t *, const char[3], int); | | 402 | char *fparseln(FILE *, size_t *, size_t *, const char[3], int); |
394 | int fpurge(FILE *); | | 403 | int fpurge(FILE *); |
395 | void setbuffer(FILE *, char *, int); | | 404 | void setbuffer(FILE *, char *, int); |
396 | int setlinebuf(FILE *); | | 405 | int setlinebuf(FILE *); |
397 | int vasprintf(char ** __restrict, const char * __restrict, | | 406 | int vasprintf(char ** __restrict, const char * __restrict, |
398 | _BSD_VA_LIST_) | | 407 | _BSD_VA_LIST_) |
399 | __attribute__((__format__(__printf__, 2, 0))); | | 408 | __attribute__((__format__(__printf__, 2, 0))); |
400 | const char *fmtcheck(const char *, const char *) | | 409 | const char *fmtcheck(const char *, const char *) |
401 | __attribute__((__format_arg__(2))); | | 410 | __attribute__((__format_arg__(2))); |
402 | __END_DECLS | | 411 | __END_DECLS |
403 | | | 412 | |
404 | /* | | 413 | /* |
405 | * Stdio function-access interface. | | 414 | * Stdio function-access interface. |
406 | */ | | 415 | */ |
407 | __BEGIN_DECLS | | 416 | __BEGIN_DECLS |
408 | FILE *funopen(const void *, | | 417 | FILE *funopen(const void *, |
409 | int (*)(void *, char *, int), | | 418 | int (*)(void *, char *, int), |
410 | int (*)(void *, const char *, int), | | 419 | int (*)(void *, const char *, int), |
411 | fpos_t (*)(void *, fpos_t, int), | | 420 | fpos_t (*)(void *, fpos_t, int), |
412 | int (*)(void *)); | | 421 | int (*)(void *)); |
413 | __END_DECLS | | 422 | __END_DECLS |
414 | #define fropen(cookie, fn) funopen(cookie, fn, 0, 0, 0) | | 423 | #define fropen(cookie, fn) funopen(cookie, fn, 0, 0, 0) |
415 | #define fwopen(cookie, fn) funopen(cookie, 0, fn, 0, 0) | | 424 | #define fwopen(cookie, fn) funopen(cookie, 0, fn, 0, 0) |
416 | #endif /* _NETBSD_SOURCE */ | | 425 | #endif /* _NETBSD_SOURCE */ |
417 | | | 426 | |
418 | /* | | 427 | /* |
419 | * Functions internal to the implementation. | | 428 | * Functions internal to the implementation. |
420 | */ | | 429 | */ |
421 | __BEGIN_DECLS | | 430 | __BEGIN_DECLS |
422 | int __srget(FILE *); | | 431 | int __srget(FILE *); |
423 | int __swbuf(int, FILE *); | | 432 | int __swbuf(int, FILE *); |
424 | __END_DECLS | | 433 | __END_DECLS |
425 | | | 434 | |
426 | /* | | 435 | /* |
427 | * The __sfoo macros are here so that we can | | 436 | * The __sfoo macros are here so that we can |
428 | * define function versions in the C library. | | 437 | * define function versions in the C library. |
429 | */ | | 438 | */ |
430 | #define __sgetc(p) (--(p)->_r < 0 ? __srget(p) : (int)(*(p)->_p++)) | | 439 | #define __sgetc(p) (--(p)->_r < 0 ? __srget(p) : (int)(*(p)->_p++)) |
431 | #if defined(__GNUC__) && defined(__STDC__) | | 440 | #if defined(__GNUC__) && defined(__STDC__) |
432 | static __inline int __sputc(int _c, FILE *_p) { | | 441 | static __inline int __sputc(int _c, FILE *_p) { |
433 | if (--_p->_w >= 0 || (_p->_w >= _p->_lbfsize && (char)_c != '\n')) | | 442 | if (--_p->_w >= 0 || (_p->_w >= _p->_lbfsize && (char)_c != '\n')) |
434 | return (*_p->_p++ = _c); | | 443 | return (*_p->_p++ = _c); |
435 | else | | 444 | else |
436 | return (__swbuf(_c, _p)); | | 445 | return (__swbuf(_c, _p)); |
437 | } | | 446 | } |
438 | #else | | 447 | #else |
439 | /* | | 448 | /* |
440 | * This has been tuned to generate reasonable code on the vax using pcc. | | 449 | * This has been tuned to generate reasonable code on the vax using pcc. |
441 | */ | | 450 | */ |
442 | #define __sputc(c, p) \ | | 451 | #define __sputc(c, p) \ |
443 | (--(p)->_w < 0 ? \ | | 452 | (--(p)->_w < 0 ? \ |
444 | (p)->_w >= (p)->_lbfsize ? \ | | 453 | (p)->_w >= (p)->_lbfsize ? \ |
445 | (*(p)->_p = (c)), *(p)->_p != '\n' ? \ | | 454 | (*(p)->_p = (c)), *(p)->_p != '\n' ? \ |
446 | (int)*(p)->_p++ : \ | | 455 | (int)*(p)->_p++ : \ |
447 | __swbuf('\n', p) : \ | | 456 | __swbuf('\n', p) : \ |
448 | __swbuf((int)(c), p) : \ | | 457 | __swbuf((int)(c), p) : \ |
449 | (*(p)->_p = (c), (int)*(p)->_p++)) | | 458 | (*(p)->_p = (c), (int)*(p)->_p++)) |
450 | #endif | | 459 | #endif |
451 | | | 460 | |
452 | #define __sfeof(p) (((p)->_flags & __SEOF) != 0) | | 461 | #define __sfeof(p) (((p)->_flags & __SEOF) != 0) |
453 | #define __sferror(p) (((p)->_flags & __SERR) != 0) | | 462 | #define __sferror(p) (((p)->_flags & __SERR) != 0) |
454 | #define __sclearerr(p) ((void)((p)->_flags &= ~(__SERR|__SEOF))) | | 463 | #define __sclearerr(p) ((void)((p)->_flags &= ~(__SERR|__SEOF))) |
455 | #define __sfileno(p) \ | | 464 | #define __sfileno(p) \ |
456 | ((p)->_file == -1 ? -1 : (int)(unsigned short)(p)->_file) | | 465 | ((p)->_file == -1 ? -1 : (int)(unsigned short)(p)->_file) |
457 | | | 466 | |
458 | #ifndef __lint__ | | 467 | #ifndef __lint__ |
459 | #if !defined(_REENTRANT) && !defined(_PTHREADS) | | 468 | #if !defined(_REENTRANT) && !defined(_PTHREADS) |
460 | #define feof(p) __sfeof(p) | | 469 | #define feof(p) __sfeof(p) |
461 | #define ferror(p) __sferror(p) | | 470 | #define ferror(p) __sferror(p) |
462 | #define clearerr(p) __sclearerr(p) | | 471 | #define clearerr(p) __sclearerr(p) |
463 | | | 472 | |
464 | #define getc(fp) __sgetc(fp) | | 473 | #define getc(fp) __sgetc(fp) |
465 | #define putc(x, fp) __sputc(x, fp) | | 474 | #define putc(x, fp) __sputc(x, fp) |
466 | #endif /* !_REENTRANT && !_PTHREADS */ | | 475 | #endif /* !_REENTRANT && !_PTHREADS */ |
467 | #endif /* __lint__ */ | | 476 | #endif /* __lint__ */ |
468 | | | 477 | |
469 | #define getchar() getc(stdin) | | 478 | #define getchar() getc(stdin) |
470 | #define putchar(x) putc(x, stdout) | | 479 | #define putchar(x) putc(x, stdout) |
471 | | | 480 | |
472 | #if defined(_POSIX_C_SOURCE) || defined(_XOPEN_SOURCE) || \ | | 481 | #if defined(_POSIX_C_SOURCE) || defined(_XOPEN_SOURCE) || \ |
473 | defined(_NETBSD_SOURCE) | | 482 | defined(_NETBSD_SOURCE) |
474 | #if !defined(_REENTRANT) && !defined(_PTHREADS) | | 483 | #if !defined(_REENTRANT) && !defined(_PTHREADS) |
475 | #define fileno(p) __sfileno(p) | | 484 | #define fileno(p) __sfileno(p) |
476 | #endif /* !_REENTRANT && !_PTHREADS */ | | 485 | #endif /* !_REENTRANT && !_PTHREADS */ |
477 | #endif /* !_ANSI_SOURCE */ | | 486 | #endif /* !_ANSI_SOURCE */ |
478 | | | 487 | |
479 | #if (_POSIX_C_SOURCE - 0) >= 199506L || (_XOPEN_SOURCE - 0) >= 500 || \ | | 488 | #if (_POSIX_C_SOURCE - 0) >= 199506L || (_XOPEN_SOURCE - 0) >= 500 || \ |
480 | defined(_REENTRANT) || defined(_NETBSD_SOURCE) | | 489 | defined(_REENTRANT) || defined(_NETBSD_SOURCE) |
481 | #define getc_unlocked(fp) __sgetc(fp) | | 490 | #define getc_unlocked(fp) __sgetc(fp) |
482 | #define putc_unlocked(x, fp) __sputc(x, fp) | | 491 | #define putc_unlocked(x, fp) __sputc(x, fp) |
483 | | | 492 | |
484 | #define getchar_unlocked() getc_unlocked(stdin) | | 493 | #define getchar_unlocked() getc_unlocked(stdin) |
485 | #define putchar_unlocked(x) putc_unlocked(x, stdout) | | 494 | #define putchar_unlocked(x) putc_unlocked(x, stdout) |
486 | #endif /* _POSIX_C_SOURCE >= 199506 || _XOPEN_SOURCE >= 500 || _REENTRANT... */ | | 495 | #endif /* _POSIX_C_SOURCE >= 199506 || _XOPEN_SOURCE >= 500 || _REENTRANT... */ |
487 | | | 496 | |
488 | #if _FORTIFY_SOURCE > 0 | | 497 | #if _FORTIFY_SOURCE > 0 |
489 | #include <ssp/stdio.h> | | 498 | #include <ssp/stdio.h> |
490 | #endif | | 499 | #endif |
491 | | | 500 | |
492 | #endif /* _STDIO_H_ */ | | 501 | #endif /* _STDIO_H_ */ |