Libc-1082.50.1.tar.gz
[apple/libc.git] / include / stdio.h
CommitLineData
5b2abdfb 1/*
1f2f436a 2 * Copyright (c) 2000, 2005, 2007, 2009, 2010 Apple Inc. All rights reserved.
5b2abdfb
A
3 *
4 * @APPLE_LICENSE_HEADER_START@
224c7076 5 *
734aad71
A
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.
224c7076 12 *
734aad71
A
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
5b2abdfb
A
15 * EXPRESS OR IMPLIED, AND APPLE HEREBY DISCLAIMS ALL SUCH WARRANTIES,
16 * INCLUDING WITHOUT LIMITATION, ANY WARRANTIES OF MERCHANTABILITY,
734aad71
A
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.
224c7076 20 *
5b2abdfb
A
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
1f2f436a
A
64#include <sys/cdefs.h>
65#include <Availability.h>
66
59e0d9fe 67#include <_types.h>
5b2abdfb 68
3d9156a7
A
69/* DO NOT REMOVE THIS COMMENT: fixincludes needs to see:
70 * __gnuc_va_list and include <stdarg.h> */
6465356a
A
71#include <sys/_types/_va_list.h>
72#include <sys/_types/_size_t.h>
73#include <sys/_types/_null.h>
5b2abdfb 74
23e20b00
A
75#include <sys/stdio.h>
76
3d9156a7 77typedef __darwin_off_t fpos_t;
5b2abdfb
A
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 */
88struct __sbuf {
3d9156a7
A
89 unsigned char *_base;
90 int _size;
5b2abdfb
A
91};
92
9385eb3d
A
93/* hold a buncha junk that would grow the ABI */
94struct __sFILEX;
95
5b2abdfb
A
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 */
122typedef 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 */
9385eb3d
A
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);
5b2abdfb
A
137
138 /* separate buffer for long sequences of ungetc() */
139 struct __sbuf _ub; /* ungetc buffer */
9385eb3d 140 struct __sFILEX *_extra; /* additions to FILE to not break ABI */
5b2abdfb
A
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
3d9156a7
A
156extern FILE *__stdinp;
157extern FILE *__stdoutp;
158extern FILE *__stderrp;
5b2abdfb
A
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 */
9385eb3d 177#define __SIGN 0x8000 /* ignore this file in _fwalk */
5b2abdfb
A
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
5b2abdfb
A
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
3d9156a7
A
216#define stdin __stdinp
217#define stdout __stdoutp
218#define stderr __stderrp
5b2abdfb 219
1f2f436a
A
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
5b2abdfb 230__BEGIN_DECLS
9385eb3d
A
231void clearerr(FILE *);
232int fclose(FILE *);
233int feof(FILE *);
234int ferror(FILE *);
235int fflush(FILE *);
236int fgetc(FILE *);
59e0d9fe
A
237int fgetpos(FILE * __restrict, fpos_t *);
238char *fgets(char * __restrict, int, FILE *);
1f2f436a
A
239#if defined(_DARWIN_UNLIMITED_STREAMS) || defined(_DARWIN_C_SOURCE)
240FILE *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 */
34e8f829
A
242//Begin-Libc
243#ifndef LIBC_ALIAS_FOPEN
244//End-Libc
1f2f436a 245FILE *fopen(const char * __restrict, const char * __restrict) __DARWIN_ALIAS_STARTING(__MAC_10_6, __IPHONE_2_0, __DARWIN_ALIAS(fopen));
34e8f829
A
246//Begin-Libc
247#else /* LIBC_ALIAS_FOPEN */
248FILE *fopen(const char * __restrict, const char * __restrict) LIBC_ALIAS(fopen);
249#endif /* !LIBC_ALIAS_FOPEN */
250//End-Libc
1f2f436a 251#endif /* (DARWIN_UNLIMITED_STREAMS || _DARWIN_C_SOURCE) */
ad3c9f2a 252int fprintf(FILE * __restrict, const char * __restrict, ...) __printflike(2, 3);
9385eb3d 253int fputc(int, FILE *);
224c7076
A
254//Begin-Libc
255#ifndef LIBC_ALIAS_FPUTS
256//End-Libc
257int fputs(const char * __restrict, FILE * __restrict) __DARWIN_ALIAS(fputs);
258//Begin-Libc
259#else /* LIBC_ALIAS_FPUTS */
260int fputs(const char * __restrict, FILE * __restrict) LIBC_ALIAS(fputs);
261#endif /* !LIBC_ALIAS_FPUTS */
262//End-Libc
59e0d9fe 263size_t fread(void * __restrict, size_t, size_t, FILE * __restrict);
224c7076
A
264//Begin-Libc
265#ifndef LIBC_ALIAS_FREOPEN
266//End-Libc
59e0d9fe 267FILE *freopen(const char * __restrict, const char * __restrict,
1f2f436a 268 FILE * __restrict) __DARWIN_ALIAS(freopen);
224c7076
A
269//Begin-Libc
270#else /* LIBC_ALIAS_FREOPEN */
271FILE *freopen(const char * __restrict, const char * __restrict,
1f2f436a 272 FILE * __restrict) LIBC_ALIAS(freopen);
224c7076
A
273#endif /* !LIBC_ALIAS_FREOPEN */
274//End-Libc
ad3c9f2a 275int fscanf(FILE * __restrict, const char * __restrict, ...) __scanflike(2, 3);
9385eb3d
A
276int fseek(FILE *, long, int);
277int fsetpos(FILE *, const fpos_t *);
278long ftell(FILE *);
224c7076
A
279//Begin-Libc
280#ifndef LIBC_ALIAS_FWRITE
281//End-Libc
3d9156a7 282size_t fwrite(const void * __restrict, size_t, size_t, FILE * __restrict) __DARWIN_ALIAS(fwrite);
224c7076
A
283//Begin-Libc
284#else /* LIBC_ALIAS_FWRITE */
285size_t fwrite(const void * __restrict, size_t, size_t, FILE * __restrict) LIBC_ALIAS(fwrite);
286#endif /* !LIBC_ALIAS_FWRITE */
287//End-Libc
9385eb3d
A
288int getc(FILE *);
289int getchar(void);
290char *gets(char *);
9385eb3d 291void perror(const char *);
ad3c9f2a 292int printf(const char * __restrict, ...) __printflike(1, 2);
9385eb3d
A
293int putc(int, FILE *);
294int putchar(int);
295int puts(const char *);
296int remove(const char *);
297int rename (const char *, const char *);
298void rewind(FILE *);
ad3c9f2a 299int scanf(const char * __restrict, ...) __scanflike(1, 2);
59e0d9fe
A
300void setbuf(FILE * __restrict, char * __restrict);
301int setvbuf(FILE * __restrict, char * __restrict, int, size_t);
ad3c9f2a
A
302int sprintf(char * __restrict, const char * __restrict, ...) __printflike(2, 3);
303int sscanf(const char * __restrict, const char * __restrict, ...) __scanflike(2, 3);
9385eb3d 304FILE *tmpfile(void);
6465356a
A
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
9385eb3d
A
309char *tmpnam(char *);
310int ungetc(int, FILE *);
ad3c9f2a
A
311int vfprintf(FILE * __restrict, const char * __restrict, va_list) __printflike(2, 0);
312int vprintf(const char * __restrict, va_list) __printflike(1, 0);
313int vsprintf(char * __restrict, const char * __restrict, va_list) __printflike(2, 0);
5b2abdfb
A
314__END_DECLS
315
1f2f436a
A
316
317
318/* Additional functionality provided by:
319 * POSIX.1-1988
5b2abdfb 320 */
1f2f436a
A
321
322#if __DARWIN_C_LEVEL >= 198808L
5b2abdfb
A
323#define L_ctermid 1024 /* size for ctermid(); PATH_MAX */
324
325__BEGIN_DECLS
1f2f436a
A
326#ifndef __CTERMID_DEFINED
327/* Multiply defined in stdio.h and unistd.h by SUS */
328#define __CTERMID_DEFINED 1
9385eb3d 329char *ctermid(char *);
1f2f436a
A
330#endif
331
332#if defined(_DARWIN_UNLIMITED_STREAMS) || defined(_DARWIN_C_SOURCE)
333FILE *fdopen(int, const char *) __DARWIN_ALIAS_STARTING(__MAC_10_6, __IPHONE_3_2, __DARWIN_EXTSN(fdopen));
334#else /* !_DARWIN_UNLIMITED_STREAMS && !_DARWIN_C_SOURCE */
34e8f829
A
335//Begin-Libc
336#ifndef LIBC_ALIAS_FDOPEN
337//End-Libc
1f2f436a 338FILE *fdopen(int, const char *) __DARWIN_ALIAS_STARTING(__MAC_10_6, __IPHONE_2_0, __DARWIN_ALIAS(fdopen));
34e8f829
A
339//Begin-Libc
340#else /* LIBC_ALIAS_FDOPEN */
341FILE *fdopen(int, const char *) LIBC_ALIAS(fdopen);
342#endif /* !LIBC_ALIAS_FDOPEN */
343//End-Libc
1f2f436a 344#endif /* (DARWIN_UNLIMITED_STREAMS || _DARWIN_C_SOURCE) */
59e0d9fe 345int fileno(FILE *);
1f2f436a
A
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
9385eb3d 356int pclose(FILE *);
1f2f436a
A
357#if defined(_DARWIN_UNLIMITED_STREAMS) || defined(_DARWIN_C_SOURCE)
358FILE *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 */
34e8f829
A
360//Begin-Libc
361#ifndef LIBC_ALIAS_POPEN
362//End-Libc
1f2f436a 363FILE *popen(const char *, const char *) __DARWIN_ALIAS_STARTING(__MAC_10_6, __IPHONE_2_0, __DARWIN_ALIAS(popen));
34e8f829
A
364//Begin-Libc
365#else /* LIBC_ALIAS_POPEN */
366FILE *popen(const char *, const char *) LIBC_ALIAS(popen);
367#endif /* !LIBC_ALIAS_POPEN */
368//End-Libc
1f2f436a 369#endif /* (DARWIN_UNLIMITED_STREAMS || _DARWIN_C_SOURCE) */
5b2abdfb 370__END_DECLS
1f2f436a 371#endif /* __DARWIN_C_LEVEL >= 199209L */
5b2abdfb 372
5b2abdfb 373
1f2f436a
A
374
375
376/* Additional functionality provided by:
377 * POSIX.1c-1995,
378 * POSIX.1i-1995,
379 * and the omnibus ISO/IEC 9945-1: 1996
5b2abdfb 380 */
1f2f436a
A
381
382#if __DARWIN_C_LEVEL >= 199506L
383
384/* Functions internal to the implementation. */
5b2abdfb 385__BEGIN_DECLS
9385eb3d 386int __srget(FILE *);
ad3c9f2a 387int __svfscanf(FILE *, const char *, va_list) __scanflike(2, 0);
9385eb3d 388int __swbuf(int, FILE *);
5b2abdfb
A
389__END_DECLS
390
391/*
224c7076 392 * The __sfoo macros are here so that we can
5b2abdfb
A
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__)
6465356a 397__header_always_inline int __sputc(int _c, FILE *_p) {
5b2abdfb
A
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
1f2f436a
A
422__BEGIN_DECLS
423void flockfile(FILE *);
424int ftrylockfile(FILE *);
425void funlockfile(FILE *);
426int getc_unlocked(FILE *);
427int getchar_unlocked(void);
428int putc_unlocked(int, FILE *);
429int putchar_unlocked(int);
430
431/* Removed in Issue 6 */
432#if !defined(_POSIX_C_SOURCE) || _POSIX_C_SOURCE < 200112L
433int getw(FILE *);
434int putw(int, FILE *);
435#endif
436
6465356a
A
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
1f2f436a
A
440//Begin-Libc
441#ifndef LIBC_ALIAS_TEMPNAM
442//End-Libc
443char *tempnam(const char *, const char *) __DARWIN_ALIAS(tempnam);
444//Begin-Libc
445#else /* LIBC_ALIAS_TEMPNAM */
446char *tempnam(const char *, const char *) LIBC_ALIAS(tempnam);
447#endif /* !LIBC_ALIAS_TEMPNAM */
448//End-Libc
449__END_DECLS
5b2abdfb
A
450
451#ifndef lint
9385eb3d
A
452#define getc_unlocked(fp) __sgetc(fp)
453#define putc_unlocked(x, fp) __sputc(x, fp)
5b2abdfb
A
454#endif /* lint */
455
9385eb3d
A
456#define getchar_unlocked() getc_unlocked(stdin)
457#define putchar_unlocked(x) putc_unlocked(x, stdout)
1f2f436a
A
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
6465356a 468#include <sys/_types/_off_t.h>
1f2f436a
A
469
470__BEGIN_DECLS
471int fseeko(FILE *, off_t, int);
472off_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
ad3c9f2a
A
478int snprintf(char * __restrict, size_t, const char * __restrict, ...) __printflike(3, 4);
479int vfscanf(FILE * __restrict, const char * __restrict, va_list) __scanflike(2, 0);
480int vscanf(const char * __restrict, va_list) __scanflike(1, 0);
481int vsnprintf(char * __restrict, size_t, const char * __restrict, va_list) __printflike(3, 0);
482int vsscanf(const char * __restrict, const char * __restrict, va_list) __scanflike(2, 0);
1f2f436a
A
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
6465356a 493#include <sys/_types/_ssize_t.h>
1f2f436a
A
494
495__BEGIN_DECLS
ad3c9f2a
A
496int dprintf(int, const char * __restrict, ...) __printflike(2, 3) __OSX_AVAILABLE_STARTING(__MAC_10_7, __IPHONE_4_3);
497int vdprintf(int, const char * __restrict, va_list) __printflike(2, 0) __OSX_AVAILABLE_STARTING(__MAC_10_7, __IPHONE_4_3);
1f2f436a
A
498ssize_t getdelim(char ** __restrict, size_t * __restrict, int, FILE * __restrict) __OSX_AVAILABLE_STARTING(__MAC_10_7, __IPHONE_4_3);
499ssize_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
509extern __const int sys_nerr; /* perror(3) external variables */
510extern __const char *__const sys_errlist[];
511
6465356a 512int asprintf(char ** __restrict, const char * __restrict, ...) __printflike(2, 3);
1f2f436a
A
513char *ctermid_r(char *);
514char *fgetln(FILE *, size_t *);
515__const char *fmtcheck(const char *, const char *);
516int fpurge(FILE *);
517void setbuffer(FILE *, char *, int);
518int setlinebuf(FILE *);
6465356a 519int vasprintf(char ** __restrict, const char * __restrict, va_list) __printflike(2, 0);
1f2f436a
A
520FILE *zopen(const char *, const char *, int);
521
522
523/*
524 * Stdio function-access interface.
525 */
526FILE *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
59e0d9fe 542
3d9156a7
A
543#ifdef _USE_EXTENDED_LOCALES_
544#include <xlocale/_stdio.h>
545#endif /* _USE_EXTENDED_LOCALES_ */
546
224c7076
A
547#if defined (__GNUC__) && _FORTIFY_SOURCE > 0 && !defined (__cplusplus)
548/* Security checking functions. */
549#include <secure/_stdio.h>
550#endif
551
5b2abdfb 552#endif /* _STDIO_H_ */