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