]> git.saurik.com Git - apple/libc.git/blob - include/stdio.h
Libc-1082.50.1.tar.gz
[apple/libc.git] / include / stdio.h
1 /*
2 * Copyright (c) 2000, 2005, 2007, 2009, 2010 Apple Inc. All rights reserved.
3 *
4 * @APPLE_LICENSE_HEADER_START@
5 *
6 * This file contains Original Code and/or Modifications of Original Code
7 * as defined in and that are subject to the Apple Public Source License
8 * Version 2.0 (the 'License'). You may not use this file except in
9 * compliance with the License. Please obtain a copy of the License at
10 * http://www.opensource.apple.com/apsl/ and read it before using this
11 * file.
12 *
13 * The Original Code and all software distributed under the License are
14 * distributed on an 'AS IS' basis, WITHOUT WARRANTY OF ANY KIND, EITHER
15 * EXPRESS OR IMPLIED, AND APPLE HEREBY DISCLAIMS ALL SUCH WARRANTIES,
16 * INCLUDING WITHOUT LIMITATION, ANY WARRANTIES OF MERCHANTABILITY,
17 * FITNESS FOR A PARTICULAR PURPOSE, QUIET ENJOYMENT OR NON-INFRINGEMENT.
18 * Please see the License for the specific language governing rights and
19 * limitations under the License.
20 *
21 * @APPLE_LICENSE_HEADER_END@
22 */
23 /*-
24 * Copyright (c) 1990, 1993
25 * The Regents of the University of California. All rights reserved.
26 *
27 * This code is derived from software contributed to Berkeley by
28 * Chris Torek.
29 *
30 * Redistribution and use in source and binary forms, with or without
31 * modification, are permitted provided that the following conditions
32 * are met:
33 * 1. Redistributions of source code must retain the above copyright
34 * notice, this list of conditions and the following disclaimer.
35 * 2. Redistributions in binary form must reproduce the above copyright
36 * notice, this list of conditions and the following disclaimer in the
37 * documentation and/or other materials provided with the distribution.
38 * 3. All advertising materials mentioning features or use of this software
39 * must display the following acknowledgement:
40 * This product includes software developed by the University of
41 * California, Berkeley and its contributors.
42 * 4. Neither the name of the University nor the names of its contributors
43 * may be used to endorse or promote products derived from this software
44 * without specific prior written permission.
45 *
46 * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
47 * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
48 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
49 * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
50 * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
51 * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
52 * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
53 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
54 * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
55 * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
56 * SUCH DAMAGE.
57 *
58 * @(#)stdio.h 8.5 (Berkeley) 4/29/95
59 */
60
61 #ifndef _STDIO_H_
62 #define _STDIO_H_
63
64 #include <sys/cdefs.h>
65 #include <Availability.h>
66
67 #include <_types.h>
68
69 /* DO NOT REMOVE THIS COMMENT: fixincludes needs to see:
70 * __gnuc_va_list and include <stdarg.h> */
71 #include <sys/_types/_va_list.h>
72 #include <sys/_types/_size_t.h>
73 #include <sys/_types/_null.h>
74
75 #include <sys/stdio.h>
76
77 typedef __darwin_off_t fpos_t;
78
79 #define _FSTDIO /* Define for new stdio with functions. */
80
81 /*
82 * NB: to fit things in six character monocase externals, the stdio
83 * code uses the prefix `__s' for stdio objects, typically followed
84 * by a three-character attempt at a mnemonic.
85 */
86
87 /* stdio buffers */
88 struct __sbuf {
89 unsigned char *_base;
90 int _size;
91 };
92
93 /* hold a buncha junk that would grow the ABI */
94 struct __sFILEX;
95
96 /*
97 * stdio state variables.
98 *
99 * The following always hold:
100 *
101 * if (_flags&(__SLBF|__SWR)) == (__SLBF|__SWR),
102 * _lbfsize is -_bf._size, else _lbfsize is 0
103 * if _flags&__SRD, _w is 0
104 * if _flags&__SWR, _r is 0
105 *
106 * This ensures that the getc and putc macros (or inline functions) never
107 * try to write or read from a file that is in `read' or `write' mode.
108 * (Moreover, they can, and do, automatically switch from read mode to
109 * write mode, and back, on "r+" and "w+" files.)
110 *
111 * _lbfsize is used only to make the inline line-buffered output stream
112 * code as compact as possible.
113 *
114 * _ub, _up, and _ur are used when ungetc() pushes back more characters
115 * than fit in the current _bf, or when ungetc() pushes back a character
116 * that does not match the previous one in _bf. When this happens,
117 * _ub._base becomes non-nil (i.e., a stream has ungetc() data iff
118 * _ub._base!=NULL) and _up and _ur save the current values of _p and _r.
119 *
120 * NB: see WARNING above before changing the layout of this structure!
121 */
122 typedef struct __sFILE {
123 unsigned char *_p; /* current position in (some) buffer */
124 int _r; /* read space left for getc() */
125 int _w; /* write space left for putc() */
126 short _flags; /* flags, below; this FILE is free if 0 */
127 short _file; /* fileno, if Unix descriptor, else -1 */
128 struct __sbuf _bf; /* the buffer (at least 1 byte, if !NULL) */
129 int _lbfsize; /* 0 or -_bf._size, for inline putc */
130
131 /* operations */
132 void *_cookie; /* cookie passed to io functions */
133 int (*_close)(void *);
134 int (*_read) (void *, char *, int);
135 fpos_t (*_seek) (void *, fpos_t, int);
136 int (*_write)(void *, const char *, int);
137
138 /* separate buffer for long sequences of ungetc() */
139 struct __sbuf _ub; /* ungetc buffer */
140 struct __sFILEX *_extra; /* additions to FILE to not break ABI */
141 int _ur; /* saved _r when _r is counting ungetc data */
142
143 /* tricks to meet minimum requirements even when malloc() fails */
144 unsigned char _ubuf[3]; /* guarantee an ungetc() buffer */
145 unsigned char _nbuf[1]; /* guarantee a getc() buffer */
146
147 /* separate buffer for fgetln() when line crosses buffer boundary */
148 struct __sbuf _lb; /* buffer for fgetln() */
149
150 /* Unix stdio files get aligned to block boundaries on fseek() */
151 int _blksize; /* stat.st_blksize (may be != _bf._size) */
152 fpos_t _offset; /* current lseek offset (see WARNING) */
153 } FILE;
154
155 __BEGIN_DECLS
156 extern FILE *__stdinp;
157 extern FILE *__stdoutp;
158 extern FILE *__stderrp;
159 __END_DECLS
160
161 #define __SLBF 0x0001 /* line buffered */
162 #define __SNBF 0x0002 /* unbuffered */
163 #define __SRD 0x0004 /* OK to read */
164 #define __SWR 0x0008 /* OK to write */
165 /* RD and WR are never simultaneously asserted */
166 #define __SRW 0x0010 /* open for reading & writing */
167 #define __SEOF 0x0020 /* found EOF */
168 #define __SERR 0x0040 /* found error */
169 #define __SMBF 0x0080 /* _buf is from malloc */
170 #define __SAPP 0x0100 /* fdopen()ed in append mode */
171 #define __SSTR 0x0200 /* this is an sprintf/snprintf string */
172 #define __SOPT 0x0400 /* do fseek() optimisation */
173 #define __SNPT 0x0800 /* do not do fseek() optimisation */
174 #define __SOFF 0x1000 /* set iff _offset is in fact correct */
175 #define __SMOD 0x2000 /* true => fgetln modified _p text */
176 #define __SALC 0x4000 /* allocate string space dynamically */
177 #define __SIGN 0x8000 /* ignore this file in _fwalk */
178
179 /*
180 * The following three definitions are for ANSI C, which took them
181 * from System V, which brilliantly took internal interface macros and
182 * made them official arguments to setvbuf(), without renaming them.
183 * Hence, these ugly _IOxxx names are *supposed* to appear in user code.
184 *
185 * Although numbered as their counterparts above, the implementation
186 * does not rely on this.
187 */
188 #define _IOFBF 0 /* setvbuf should set fully buffered */
189 #define _IOLBF 1 /* setvbuf should set line buffered */
190 #define _IONBF 2 /* setvbuf should set unbuffered */
191
192 #define BUFSIZ 1024 /* size of buffer used by setbuf */
193 #define EOF (-1)
194
195 /* must be == _POSIX_STREAM_MAX <limits.h> */
196 #define FOPEN_MAX 20 /* must be <= OPEN_MAX <sys/syslimits.h> */
197 #define FILENAME_MAX 1024 /* must be <= PATH_MAX <sys/syslimits.h> */
198
199 /* System V/ANSI C; this is the wrong way to do this, do *not* use these. */
200 #ifndef _ANSI_SOURCE
201 #define P_tmpdir "/var/tmp/"
202 #endif
203 #define L_tmpnam 1024 /* XXX must be == PATH_MAX */
204 #define TMP_MAX 308915776
205
206 #ifndef SEEK_SET
207 #define SEEK_SET 0 /* set file offset to offset */
208 #endif
209 #ifndef SEEK_CUR
210 #define SEEK_CUR 1 /* set file offset to current plus offset */
211 #endif
212 #ifndef SEEK_END
213 #define SEEK_END 2 /* set file offset to EOF plus offset */
214 #endif
215
216 #define stdin __stdinp
217 #define stdout __stdoutp
218 #define stderr __stderrp
219
220 #ifdef _DARWIN_UNLIMITED_STREAMS
221 #if defined(__IPHONE_OS_VERSION_MIN_REQUIRED) && __IPHONE_OS_VERSION_MIN_REQUIRED < __IPHONE_3_2
222 #error "_DARWIN_UNLIMITED_STREAMS specified, but -miphoneos-version-min version does not support it."
223 #elif defined(__MAC_OS_X_VERSION_MIN_REQUIRED) && __MAC_OS_X_VERSION_MIN_REQUIRED < __MAC_10_6
224 #error "_DARWIN_UNLIMITED_STREAMS specified, but -mmacosx-version-min version does not support it."
225 #endif
226 #endif
227
228 /* ANSI-C */
229
230 __BEGIN_DECLS
231 void clearerr(FILE *);
232 int fclose(FILE *);
233 int feof(FILE *);
234 int ferror(FILE *);
235 int fflush(FILE *);
236 int fgetc(FILE *);
237 int fgetpos(FILE * __restrict, fpos_t *);
238 char *fgets(char * __restrict, int, FILE *);
239 #if defined(_DARWIN_UNLIMITED_STREAMS) || defined(_DARWIN_C_SOURCE)
240 FILE *fopen(const char * __restrict, const char * __restrict) __DARWIN_ALIAS_STARTING(__MAC_10_6, __IPHONE_3_2, __DARWIN_EXTSN(fopen));
241 #else /* !_DARWIN_UNLIMITED_STREAMS && !_DARWIN_C_SOURCE */
242 //Begin-Libc
243 #ifndef LIBC_ALIAS_FOPEN
244 //End-Libc
245 FILE *fopen(const char * __restrict, const char * __restrict) __DARWIN_ALIAS_STARTING(__MAC_10_6, __IPHONE_2_0, __DARWIN_ALIAS(fopen));
246 //Begin-Libc
247 #else /* LIBC_ALIAS_FOPEN */
248 FILE *fopen(const char * __restrict, const char * __restrict) LIBC_ALIAS(fopen);
249 #endif /* !LIBC_ALIAS_FOPEN */
250 //End-Libc
251 #endif /* (DARWIN_UNLIMITED_STREAMS || _DARWIN_C_SOURCE) */
252 int fprintf(FILE * __restrict, const char * __restrict, ...) __printflike(2, 3);
253 int fputc(int, FILE *);
254 //Begin-Libc
255 #ifndef LIBC_ALIAS_FPUTS
256 //End-Libc
257 int fputs(const char * __restrict, FILE * __restrict) __DARWIN_ALIAS(fputs);
258 //Begin-Libc
259 #else /* LIBC_ALIAS_FPUTS */
260 int fputs(const char * __restrict, FILE * __restrict) LIBC_ALIAS(fputs);
261 #endif /* !LIBC_ALIAS_FPUTS */
262 //End-Libc
263 size_t fread(void * __restrict, size_t, size_t, FILE * __restrict);
264 //Begin-Libc
265 #ifndef LIBC_ALIAS_FREOPEN
266 //End-Libc
267 FILE *freopen(const char * __restrict, const char * __restrict,
268 FILE * __restrict) __DARWIN_ALIAS(freopen);
269 //Begin-Libc
270 #else /* LIBC_ALIAS_FREOPEN */
271 FILE *freopen(const char * __restrict, const char * __restrict,
272 FILE * __restrict) LIBC_ALIAS(freopen);
273 #endif /* !LIBC_ALIAS_FREOPEN */
274 //End-Libc
275 int fscanf(FILE * __restrict, const char * __restrict, ...) __scanflike(2, 3);
276 int fseek(FILE *, long, int);
277 int fsetpos(FILE *, const fpos_t *);
278 long ftell(FILE *);
279 //Begin-Libc
280 #ifndef LIBC_ALIAS_FWRITE
281 //End-Libc
282 size_t fwrite(const void * __restrict, size_t, size_t, FILE * __restrict) __DARWIN_ALIAS(fwrite);
283 //Begin-Libc
284 #else /* LIBC_ALIAS_FWRITE */
285 size_t fwrite(const void * __restrict, size_t, size_t, FILE * __restrict) LIBC_ALIAS(fwrite);
286 #endif /* !LIBC_ALIAS_FWRITE */
287 //End-Libc
288 int getc(FILE *);
289 int getchar(void);
290 char *gets(char *);
291 void perror(const char *);
292 int printf(const char * __restrict, ...) __printflike(1, 2);
293 int putc(int, FILE *);
294 int putchar(int);
295 int puts(const char *);
296 int remove(const char *);
297 int rename (const char *, const char *);
298 void rewind(FILE *);
299 int scanf(const char * __restrict, ...) __scanflike(1, 2);
300 void setbuf(FILE * __restrict, char * __restrict);
301 int setvbuf(FILE * __restrict, char * __restrict, int, size_t);
302 int sprintf(char * __restrict, const char * __restrict, ...) __printflike(2, 3);
303 int sscanf(const char * __restrict, const char * __restrict, ...) __scanflike(2, 3);
304 FILE *tmpfile(void);
305
306 #if !defined(_POSIX_C_SOURCE)
307 __deprecated_msg("This function is provided for compatibility reasons only. Due to security concerns inherent in the design of tmpnam(3), it is highly recommended that you use mkstemp(3) instead.")
308 #endif
309 char *tmpnam(char *);
310 int ungetc(int, FILE *);
311 int vfprintf(FILE * __restrict, const char * __restrict, va_list) __printflike(2, 0);
312 int vprintf(const char * __restrict, va_list) __printflike(1, 0);
313 int vsprintf(char * __restrict, const char * __restrict, va_list) __printflike(2, 0);
314 __END_DECLS
315
316
317
318 /* Additional functionality provided by:
319 * POSIX.1-1988
320 */
321
322 #if __DARWIN_C_LEVEL >= 198808L
323 #define L_ctermid 1024 /* size for ctermid(); PATH_MAX */
324
325 __BEGIN_DECLS
326 #ifndef __CTERMID_DEFINED
327 /* Multiply defined in stdio.h and unistd.h by SUS */
328 #define __CTERMID_DEFINED 1
329 char *ctermid(char *);
330 #endif
331
332 #if defined(_DARWIN_UNLIMITED_STREAMS) || defined(_DARWIN_C_SOURCE)
333 FILE *fdopen(int, const char *) __DARWIN_ALIAS_STARTING(__MAC_10_6, __IPHONE_3_2, __DARWIN_EXTSN(fdopen));
334 #else /* !_DARWIN_UNLIMITED_STREAMS && !_DARWIN_C_SOURCE */
335 //Begin-Libc
336 #ifndef LIBC_ALIAS_FDOPEN
337 //End-Libc
338 FILE *fdopen(int, const char *) __DARWIN_ALIAS_STARTING(__MAC_10_6, __IPHONE_2_0, __DARWIN_ALIAS(fdopen));
339 //Begin-Libc
340 #else /* LIBC_ALIAS_FDOPEN */
341 FILE *fdopen(int, const char *) LIBC_ALIAS(fdopen);
342 #endif /* !LIBC_ALIAS_FDOPEN */
343 //End-Libc
344 #endif /* (DARWIN_UNLIMITED_STREAMS || _DARWIN_C_SOURCE) */
345 int fileno(FILE *);
346 __END_DECLS
347 #endif /* __DARWIN_C_LEVEL >= 198808L */
348
349
350 /* Additional functionality provided by:
351 * POSIX.2-1992 C Language Binding Option
352 */
353
354 #if __DARWIN_C_LEVEL >= 199209L
355 __BEGIN_DECLS
356 int pclose(FILE *);
357 #if defined(_DARWIN_UNLIMITED_STREAMS) || defined(_DARWIN_C_SOURCE)
358 FILE *popen(const char *, const char *) __DARWIN_ALIAS_STARTING(__MAC_10_6, __IPHONE_3_2, __DARWIN_EXTSN(popen));
359 #else /* !_DARWIN_UNLIMITED_STREAMS && !_DARWIN_C_SOURCE */
360 //Begin-Libc
361 #ifndef LIBC_ALIAS_POPEN
362 //End-Libc
363 FILE *popen(const char *, const char *) __DARWIN_ALIAS_STARTING(__MAC_10_6, __IPHONE_2_0, __DARWIN_ALIAS(popen));
364 //Begin-Libc
365 #else /* LIBC_ALIAS_POPEN */
366 FILE *popen(const char *, const char *) LIBC_ALIAS(popen);
367 #endif /* !LIBC_ALIAS_POPEN */
368 //End-Libc
369 #endif /* (DARWIN_UNLIMITED_STREAMS || _DARWIN_C_SOURCE) */
370 __END_DECLS
371 #endif /* __DARWIN_C_LEVEL >= 199209L */
372
373
374
375
376 /* Additional functionality provided by:
377 * POSIX.1c-1995,
378 * POSIX.1i-1995,
379 * and the omnibus ISO/IEC 9945-1: 1996
380 */
381
382 #if __DARWIN_C_LEVEL >= 199506L
383
384 /* Functions internal to the implementation. */
385 __BEGIN_DECLS
386 int __srget(FILE *);
387 int __svfscanf(FILE *, const char *, va_list) __scanflike(2, 0);
388 int __swbuf(int, FILE *);
389 __END_DECLS
390
391 /*
392 * The __sfoo macros are here so that we can
393 * define function versions in the C library.
394 */
395 #define __sgetc(p) (--(p)->_r < 0 ? __srget(p) : (int)(*(p)->_p++))
396 #if defined(__GNUC__) && defined(__STDC__)
397 __header_always_inline int __sputc(int _c, FILE *_p) {
398 if (--_p->_w >= 0 || (_p->_w >= _p->_lbfsize && (char)_c != '\n'))
399 return (*_p->_p++ = _c);
400 else
401 return (__swbuf(_c, _p));
402 }
403 #else
404 /*
405 * This has been tuned to generate reasonable code on the vax using pcc.
406 */
407 #define __sputc(c, p) \
408 (--(p)->_w < 0 ? \
409 (p)->_w >= (p)->_lbfsize ? \
410 (*(p)->_p = (c)), *(p)->_p != '\n' ? \
411 (int)*(p)->_p++ : \
412 __swbuf('\n', p) : \
413 __swbuf((int)(c), p) : \
414 (*(p)->_p = (c), (int)*(p)->_p++))
415 #endif
416
417 #define __sfeof(p) (((p)->_flags & __SEOF) != 0)
418 #define __sferror(p) (((p)->_flags & __SERR) != 0)
419 #define __sclearerr(p) ((void)((p)->_flags &= ~(__SERR|__SEOF)))
420 #define __sfileno(p) ((p)->_file)
421
422 __BEGIN_DECLS
423 void flockfile(FILE *);
424 int ftrylockfile(FILE *);
425 void funlockfile(FILE *);
426 int getc_unlocked(FILE *);
427 int getchar_unlocked(void);
428 int putc_unlocked(int, FILE *);
429 int putchar_unlocked(int);
430
431 /* Removed in Issue 6 */
432 #if !defined(_POSIX_C_SOURCE) || _POSIX_C_SOURCE < 200112L
433 int getw(FILE *);
434 int putw(int, FILE *);
435 #endif
436
437 #if !defined(_POSIX_C_SOURCE)
438 __deprecated_msg("This function is provided for compatibility reasons only. Due to security concerns inherent in the design of tempnam(3), it is highly recommended that you use mkstemp(3) instead.")
439 #endif
440 //Begin-Libc
441 #ifndef LIBC_ALIAS_TEMPNAM
442 //End-Libc
443 char *tempnam(const char *, const char *) __DARWIN_ALIAS(tempnam);
444 //Begin-Libc
445 #else /* LIBC_ALIAS_TEMPNAM */
446 char *tempnam(const char *, const char *) LIBC_ALIAS(tempnam);
447 #endif /* !LIBC_ALIAS_TEMPNAM */
448 //End-Libc
449 __END_DECLS
450
451 #ifndef lint
452 #define getc_unlocked(fp) __sgetc(fp)
453 #define putc_unlocked(x, fp) __sputc(x, fp)
454 #endif /* lint */
455
456 #define getchar_unlocked() getc_unlocked(stdin)
457 #define putchar_unlocked(x) putc_unlocked(x, stdout)
458 #endif /* __DARWIN_C_LEVEL >= 199506L */
459
460
461
462 /* Additional functionality provided by:
463 * POSIX.1-2001
464 * ISO C99
465 */
466
467 #if __DARWIN_C_LEVEL >= 200112L
468 #include <sys/_types/_off_t.h>
469
470 __BEGIN_DECLS
471 int fseeko(FILE *, off_t, int);
472 off_t ftello(FILE *);
473 __END_DECLS
474 #endif /* __DARWIN_C_LEVEL >= 200112L */
475
476 #if __DARWIN_C_LEVEL >= 200112L || defined(_C99_SOURCE) || defined(__cplusplus)
477 __BEGIN_DECLS
478 int snprintf(char * __restrict, size_t, const char * __restrict, ...) __printflike(3, 4);
479 int vfscanf(FILE * __restrict, const char * __restrict, va_list) __scanflike(2, 0);
480 int vscanf(const char * __restrict, va_list) __scanflike(1, 0);
481 int vsnprintf(char * __restrict, size_t, const char * __restrict, va_list) __printflike(3, 0);
482 int vsscanf(const char * __restrict, const char * __restrict, va_list) __scanflike(2, 0);
483 __END_DECLS
484 #endif /* __DARWIN_C_LEVEL >= 200112L || defined(_C99_SOURCE) || defined(__cplusplus) */
485
486
487
488 /* Additional functionality provided by:
489 * POSIX.1-2008
490 */
491
492 #if __DARWIN_C_LEVEL >= 200809L
493 #include <sys/_types/_ssize_t.h>
494
495 __BEGIN_DECLS
496 int dprintf(int, const char * __restrict, ...) __printflike(2, 3) __OSX_AVAILABLE_STARTING(__MAC_10_7, __IPHONE_4_3);
497 int vdprintf(int, const char * __restrict, va_list) __printflike(2, 0) __OSX_AVAILABLE_STARTING(__MAC_10_7, __IPHONE_4_3);
498 ssize_t getdelim(char ** __restrict, size_t * __restrict, int, FILE * __restrict) __OSX_AVAILABLE_STARTING(__MAC_10_7, __IPHONE_4_3);
499 ssize_t getline(char ** __restrict, size_t * __restrict, FILE * __restrict) __OSX_AVAILABLE_STARTING(__MAC_10_7, __IPHONE_4_3);
500 __END_DECLS
501 #endif /* __DARWIN_C_LEVEL >= 200809L */
502
503
504
505 /* Darwin extensions */
506
507 #if __DARWIN_C_LEVEL >= __DARWIN_C_FULL
508 __BEGIN_DECLS
509 extern __const int sys_nerr; /* perror(3) external variables */
510 extern __const char *__const sys_errlist[];
511
512 int asprintf(char ** __restrict, const char * __restrict, ...) __printflike(2, 3);
513 char *ctermid_r(char *);
514 char *fgetln(FILE *, size_t *);
515 __const char *fmtcheck(const char *, const char *);
516 int fpurge(FILE *);
517 void setbuffer(FILE *, char *, int);
518 int setlinebuf(FILE *);
519 int vasprintf(char ** __restrict, const char * __restrict, va_list) __printflike(2, 0);
520 FILE *zopen(const char *, const char *, int);
521
522
523 /*
524 * Stdio function-access interface.
525 */
526 FILE *funopen(const void *,
527 int (*)(void *, char *, int),
528 int (*)(void *, const char *, int),
529 fpos_t (*)(void *, fpos_t, int),
530 int (*)(void *));
531 __END_DECLS
532 #define fropen(cookie, fn) funopen(cookie, fn, 0, 0, 0)
533 #define fwopen(cookie, fn) funopen(cookie, 0, fn, 0, 0)
534
535 #define feof_unlocked(p) __sfeof(p)
536 #define ferror_unlocked(p) __sferror(p)
537 #define clearerr_unlocked(p) __sclearerr(p)
538 #define fileno_unlocked(p) __sfileno(p)
539
540 #endif /* __DARWIN_C_LEVEL >= __DARWIN_C_FULL */
541
542
543 #ifdef _USE_EXTENDED_LOCALES_
544 #include <xlocale/_stdio.h>
545 #endif /* _USE_EXTENDED_LOCALES_ */
546
547 #if defined (__GNUC__) && _FORTIFY_SOURCE > 0 && !defined (__cplusplus)
548 /* Security checking functions. */
549 #include <secure/_stdio.h>
550 #endif
551
552 #endif /* _STDIO_H_ */