]> git.saurik.com Git - apple/libc.git/blame - include/stdio.h
Libc-1158.50.2.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 */
974e3884
A
133 int (* _Nullable _close)(void *);
134 int (* _Nullable _read) (void *, char *, int);
135 fpos_t (* _Nullable _seek) (void *, fpos_t, int);
136 int (* _Nullable _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 239#if defined(_DARWIN_UNLIMITED_STREAMS) || defined(_DARWIN_C_SOURCE)
974e3884 240FILE *fopen(const char * __restrict __filename, const char * __restrict __mode) __DARWIN_ALIAS_STARTING(__MAC_10_6, __IPHONE_3_2, __DARWIN_EXTSN(fopen));
1f2f436a 241#else /* !_DARWIN_UNLIMITED_STREAMS && !_DARWIN_C_SOURCE */
34e8f829
A
242//Begin-Libc
243#ifndef LIBC_ALIAS_FOPEN
244//End-Libc
974e3884 245FILE *fopen(const char * __restrict __filename, const char * __restrict __mode) __DARWIN_ALIAS_STARTING(__MAC_10_6, __IPHONE_2_0, __DARWIN_ALIAS(fopen));
34e8f829
A
246//Begin-Libc
247#else /* LIBC_ALIAS_FOPEN */
974e3884 248FILE *fopen(const char * __restrict __filename, const char * __restrict __mode) LIBC_ALIAS(fopen);
34e8f829
A
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
974e3884 263size_t fread(void * __restrict __ptr, size_t __size, size_t __nitems, FILE * __restrict __stream);
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
974e3884 282size_t fwrite(const void * __restrict __ptr, size_t __size, size_t __nitems, FILE * __restrict __stream) __DARWIN_ALIAS(fwrite);
224c7076
A
283//Begin-Libc
284#else /* LIBC_ALIAS_FWRITE */
974e3884 285size_t fwrite(const void * __restrict __ptr, size_t __size, size_t __nitems, FILE * __restrict __stream) LIBC_ALIAS(fwrite);
224c7076
A
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 *);
974e3884 297int rename (const char *__old, const char *__new);
9385eb3d 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);
974e3884 302int sprintf(char * __restrict, const char * __restrict, ...) __printflike(2, 3) __swift_unavailable("Use snprintf instead.");
ad3c9f2a 303int sscanf(const char * __restrict, const char * __restrict, ...) __scanflike(2, 3);
9385eb3d 304FILE *tmpfile(void);
6465356a 305
974e3884 306__swift_unavailable("Use mkstemp(3) instead.")
6465356a
A
307#if !defined(_POSIX_C_SOURCE)
308__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.")
309#endif
9385eb3d
A
310char *tmpnam(char *);
311int ungetc(int, FILE *);
ad3c9f2a
A
312int vfprintf(FILE * __restrict, const char * __restrict, va_list) __printflike(2, 0);
313int vprintf(const char * __restrict, va_list) __printflike(1, 0);
974e3884 314int vsprintf(char * __restrict, const char * __restrict, va_list) __printflike(2, 0) __swift_unavailable("Use vsnprintf instead.");
5b2abdfb
A
315__END_DECLS
316
1f2f436a
A
317
318
319/* Additional functionality provided by:
320 * POSIX.1-1988
5b2abdfb 321 */
1f2f436a
A
322
323#if __DARWIN_C_LEVEL >= 198808L
5b2abdfb
A
324#define L_ctermid 1024 /* size for ctermid(); PATH_MAX */
325
326__BEGIN_DECLS
1f2f436a
A
327#ifndef __CTERMID_DEFINED
328/* Multiply defined in stdio.h and unistd.h by SUS */
329#define __CTERMID_DEFINED 1
9385eb3d 330char *ctermid(char *);
1f2f436a
A
331#endif
332
333#if defined(_DARWIN_UNLIMITED_STREAMS) || defined(_DARWIN_C_SOURCE)
334FILE *fdopen(int, const char *) __DARWIN_ALIAS_STARTING(__MAC_10_6, __IPHONE_3_2, __DARWIN_EXTSN(fdopen));
335#else /* !_DARWIN_UNLIMITED_STREAMS && !_DARWIN_C_SOURCE */
34e8f829
A
336//Begin-Libc
337#ifndef LIBC_ALIAS_FDOPEN
338//End-Libc
1f2f436a 339FILE *fdopen(int, const char *) __DARWIN_ALIAS_STARTING(__MAC_10_6, __IPHONE_2_0, __DARWIN_ALIAS(fdopen));
34e8f829
A
340//Begin-Libc
341#else /* LIBC_ALIAS_FDOPEN */
342FILE *fdopen(int, const char *) LIBC_ALIAS(fdopen);
343#endif /* !LIBC_ALIAS_FDOPEN */
344//End-Libc
1f2f436a 345#endif /* (DARWIN_UNLIMITED_STREAMS || _DARWIN_C_SOURCE) */
59e0d9fe 346int fileno(FILE *);
1f2f436a
A
347__END_DECLS
348#endif /* __DARWIN_C_LEVEL >= 198808L */
349
350
351/* Additional functionality provided by:
352 * POSIX.2-1992 C Language Binding Option
353 */
974e3884
A
354#if TARGET_OS_EMBEDDED
355#define __swift_unavailable_on(osx_msg, ios_msg) __swift_unavailable(ios_msg)
356#else
357#define __swift_unavailable_on(osx_msg, ios_msg) __swift_unavailable(osx_msg)
358#endif
1f2f436a
A
359
360#if __DARWIN_C_LEVEL >= 199209L
361__BEGIN_DECLS
974e3884 362int pclose(FILE *) __swift_unavailable_on("Use posix_spawn APIs or NSTask instead.", "Process spawning is unavailable.");
1f2f436a 363#if defined(_DARWIN_UNLIMITED_STREAMS) || defined(_DARWIN_C_SOURCE)
974e3884 364FILE *popen(const char *, const char *) __DARWIN_ALIAS_STARTING(__MAC_10_6, __IPHONE_3_2, __DARWIN_EXTSN(popen)) __swift_unavailable_on("Use posix_spawn APIs or NSTask instead.", "Process spawning is unavailable.");
1f2f436a 365#else /* !_DARWIN_UNLIMITED_STREAMS && !_DARWIN_C_SOURCE */
34e8f829
A
366//Begin-Libc
367#ifndef LIBC_ALIAS_POPEN
368//End-Libc
974e3884 369FILE *popen(const char *, const char *) __DARWIN_ALIAS_STARTING(__MAC_10_6, __IPHONE_2_0, __DARWIN_ALIAS(popen)) __swift_unavailable_on("Use posix_spawn APIs or NSTask instead.", "Process spawning is unavailable.");
34e8f829
A
370//Begin-Libc
371#else /* LIBC_ALIAS_POPEN */
372FILE *popen(const char *, const char *) LIBC_ALIAS(popen);
373#endif /* !LIBC_ALIAS_POPEN */
374//End-Libc
1f2f436a 375#endif /* (DARWIN_UNLIMITED_STREAMS || _DARWIN_C_SOURCE) */
5b2abdfb 376__END_DECLS
1f2f436a 377#endif /* __DARWIN_C_LEVEL >= 199209L */
5b2abdfb 378
974e3884 379#undef __swift_unavailable_on
1f2f436a
A
380
381/* Additional functionality provided by:
382 * POSIX.1c-1995,
383 * POSIX.1i-1995,
384 * and the omnibus ISO/IEC 9945-1: 1996
5b2abdfb 385 */
1f2f436a
A
386
387#if __DARWIN_C_LEVEL >= 199506L
388
389/* Functions internal to the implementation. */
5b2abdfb 390__BEGIN_DECLS
9385eb3d 391int __srget(FILE *);
ad3c9f2a 392int __svfscanf(FILE *, const char *, va_list) __scanflike(2, 0);
9385eb3d 393int __swbuf(int, FILE *);
5b2abdfb
A
394__END_DECLS
395
396/*
224c7076 397 * The __sfoo macros are here so that we can
5b2abdfb
A
398 * define function versions in the C library.
399 */
400#define __sgetc(p) (--(p)->_r < 0 ? __srget(p) : (int)(*(p)->_p++))
401#if defined(__GNUC__) && defined(__STDC__)
6465356a 402__header_always_inline int __sputc(int _c, FILE *_p) {
5b2abdfb
A
403 if (--_p->_w >= 0 || (_p->_w >= _p->_lbfsize && (char)_c != '\n'))
404 return (*_p->_p++ = _c);
405 else
406 return (__swbuf(_c, _p));
407}
408#else
409/*
410 * This has been tuned to generate reasonable code on the vax using pcc.
411 */
412#define __sputc(c, p) \
413 (--(p)->_w < 0 ? \
414 (p)->_w >= (p)->_lbfsize ? \
415 (*(p)->_p = (c)), *(p)->_p != '\n' ? \
416 (int)*(p)->_p++ : \
417 __swbuf('\n', p) : \
418 __swbuf((int)(c), p) : \
419 (*(p)->_p = (c), (int)*(p)->_p++))
420#endif
421
422#define __sfeof(p) (((p)->_flags & __SEOF) != 0)
423#define __sferror(p) (((p)->_flags & __SERR) != 0)
424#define __sclearerr(p) ((void)((p)->_flags &= ~(__SERR|__SEOF)))
425#define __sfileno(p) ((p)->_file)
426
1f2f436a
A
427__BEGIN_DECLS
428void flockfile(FILE *);
429int ftrylockfile(FILE *);
430void funlockfile(FILE *);
431int getc_unlocked(FILE *);
432int getchar_unlocked(void);
433int putc_unlocked(int, FILE *);
434int putchar_unlocked(int);
435
436/* Removed in Issue 6 */
437#if !defined(_POSIX_C_SOURCE) || _POSIX_C_SOURCE < 200112L
438int getw(FILE *);
439int putw(int, FILE *);
440#endif
441
974e3884 442__swift_unavailable("Use mkstemp(3) instead.")
6465356a
A
443#if !defined(_POSIX_C_SOURCE)
444__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.")
445#endif
1f2f436a
A
446//Begin-Libc
447#ifndef LIBC_ALIAS_TEMPNAM
448//End-Libc
974e3884 449char *tempnam(const char *__dir, const char *__prefix) __DARWIN_ALIAS(tempnam);
1f2f436a
A
450//Begin-Libc
451#else /* LIBC_ALIAS_TEMPNAM */
974e3884 452char *tempnam(const char *__dir, const char *__prefix) LIBC_ALIAS(tempnam);
1f2f436a
A
453#endif /* !LIBC_ALIAS_TEMPNAM */
454//End-Libc
455__END_DECLS
5b2abdfb
A
456
457#ifndef lint
9385eb3d
A
458#define getc_unlocked(fp) __sgetc(fp)
459#define putc_unlocked(x, fp) __sputc(x, fp)
5b2abdfb
A
460#endif /* lint */
461
9385eb3d
A
462#define getchar_unlocked() getc_unlocked(stdin)
463#define putchar_unlocked(x) putc_unlocked(x, stdout)
1f2f436a
A
464#endif /* __DARWIN_C_LEVEL >= 199506L */
465
466
467
468/* Additional functionality provided by:
469 * POSIX.1-2001
470 * ISO C99
471 */
472
473#if __DARWIN_C_LEVEL >= 200112L
6465356a 474#include <sys/_types/_off_t.h>
1f2f436a
A
475
476__BEGIN_DECLS
974e3884
A
477int fseeko(FILE * __stream, off_t __offset, int __whence);
478off_t ftello(FILE * __stream);
1f2f436a
A
479__END_DECLS
480#endif /* __DARWIN_C_LEVEL >= 200112L */
481
482#if __DARWIN_C_LEVEL >= 200112L || defined(_C99_SOURCE) || defined(__cplusplus)
483__BEGIN_DECLS
974e3884
A
484int snprintf(char * __restrict __str, size_t __size, const char * __restrict __format, ...) __printflike(3, 4);
485int vfscanf(FILE * __restrict __stream, const char * __restrict __format, va_list) __scanflike(2, 0);
486int vscanf(const char * __restrict __format, va_list) __scanflike(1, 0);
487int vsnprintf(char * __restrict __str, size_t __size, const char * __restrict __format, va_list) __printflike(3, 0);
488int vsscanf(const char * __restrict __str, const char * __restrict __format, va_list) __scanflike(2, 0);
1f2f436a
A
489__END_DECLS
490#endif /* __DARWIN_C_LEVEL >= 200112L || defined(_C99_SOURCE) || defined(__cplusplus) */
491
492
493
494/* Additional functionality provided by:
495 * POSIX.1-2008
496 */
497
498#if __DARWIN_C_LEVEL >= 200809L
6465356a 499#include <sys/_types/_ssize_t.h>
1f2f436a
A
500
501__BEGIN_DECLS
ad3c9f2a
A
502int dprintf(int, const char * __restrict, ...) __printflike(2, 3) __OSX_AVAILABLE_STARTING(__MAC_10_7, __IPHONE_4_3);
503int vdprintf(int, const char * __restrict, va_list) __printflike(2, 0) __OSX_AVAILABLE_STARTING(__MAC_10_7, __IPHONE_4_3);
974e3884
A
504ssize_t getdelim(char ** __restrict __linep, size_t * __restrict __linecapp, int __delimiter, FILE * __restrict __stream) __OSX_AVAILABLE_STARTING(__MAC_10_7, __IPHONE_4_3);
505ssize_t getline(char ** __restrict __linep, size_t * __restrict __linecapp, FILE * __restrict __stream) __OSX_AVAILABLE_STARTING(__MAC_10_7, __IPHONE_4_3);
1f2f436a
A
506__END_DECLS
507#endif /* __DARWIN_C_LEVEL >= 200809L */
508
509
510
511/* Darwin extensions */
512
513#if __DARWIN_C_LEVEL >= __DARWIN_C_FULL
514__BEGIN_DECLS
515extern __const int sys_nerr; /* perror(3) external variables */
516extern __const char *__const sys_errlist[];
517
6465356a 518int asprintf(char ** __restrict, const char * __restrict, ...) __printflike(2, 3);
1f2f436a
A
519char *ctermid_r(char *);
520char *fgetln(FILE *, size_t *);
521__const char *fmtcheck(const char *, const char *);
522int fpurge(FILE *);
523void setbuffer(FILE *, char *, int);
524int setlinebuf(FILE *);
6465356a 525int vasprintf(char ** __restrict, const char * __restrict, va_list) __printflike(2, 0);
1f2f436a
A
526FILE *zopen(const char *, const char *, int);
527
528
529/*
530 * Stdio function-access interface.
531 */
532FILE *funopen(const void *,
974e3884
A
533 int (* _Nullable)(void *, char *, int),
534 int (* _Nullable)(void *, const char *, int),
535 fpos_t (* _Nullable)(void *, fpos_t, int),
536 int (* _Nullable)(void *));
1f2f436a
A
537__END_DECLS
538#define fropen(cookie, fn) funopen(cookie, fn, 0, 0, 0)
539#define fwopen(cookie, fn) funopen(cookie, 0, fn, 0, 0)
540
541#define feof_unlocked(p) __sfeof(p)
542#define ferror_unlocked(p) __sferror(p)
543#define clearerr_unlocked(p) __sclearerr(p)
544#define fileno_unlocked(p) __sfileno(p)
545
546#endif /* __DARWIN_C_LEVEL >= __DARWIN_C_FULL */
547
59e0d9fe 548
3d9156a7
A
549#ifdef _USE_EXTENDED_LOCALES_
550#include <xlocale/_stdio.h>
551#endif /* _USE_EXTENDED_LOCALES_ */
552
224c7076
A
553#if defined (__GNUC__) && _FORTIFY_SOURCE > 0 && !defined (__cplusplus)
554/* Security checking functions. */
555#include <secure/_stdio.h>
556#endif
557
5b2abdfb 558#endif /* _STDIO_H_ */