]>
Commit | Line | Data |
---|---|---|
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 | 77 | typedef __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 */ | |
88 | struct __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 */ |
94 | struct __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 | */ | |
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 */ | |
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 |
156 | extern FILE *__stdinp; |
157 | extern FILE *__stdoutp; | |
158 | extern 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 |
231 | void clearerr(FILE *); |
232 | int fclose(FILE *); | |
233 | int feof(FILE *); | |
234 | int ferror(FILE *); | |
235 | int fflush(FILE *); | |
236 | int fgetc(FILE *); | |
59e0d9fe A |
237 | int fgetpos(FILE * __restrict, fpos_t *); |
238 | char *fgets(char * __restrict, int, FILE *); | |
1f2f436a | 239 | #if defined(_DARWIN_UNLIMITED_STREAMS) || defined(_DARWIN_C_SOURCE) |
974e3884 | 240 | FILE *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 | 245 | FILE *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 | 248 | FILE *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 | 252 | int fprintf(FILE * __restrict, const char * __restrict, ...) __printflike(2, 3); |
9385eb3d | 253 | int fputc(int, FILE *); |
224c7076 A |
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 | |
974e3884 | 263 | size_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 | 267 | FILE *freopen(const char * __restrict, const char * __restrict, |
1f2f436a | 268 | FILE * __restrict) __DARWIN_ALIAS(freopen); |
224c7076 A |
269 | //Begin-Libc |
270 | #else /* LIBC_ALIAS_FREOPEN */ | |
271 | FILE *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 | 275 | int fscanf(FILE * __restrict, const char * __restrict, ...) __scanflike(2, 3); |
9385eb3d A |
276 | int fseek(FILE *, long, int); |
277 | int fsetpos(FILE *, const fpos_t *); | |
278 | long ftell(FILE *); | |
224c7076 A |
279 | //Begin-Libc |
280 | #ifndef LIBC_ALIAS_FWRITE | |
281 | //End-Libc | |
974e3884 | 282 | size_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 | 285 | size_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 |
288 | int getc(FILE *); |
289 | int getchar(void); | |
290 | char *gets(char *); | |
9385eb3d | 291 | void perror(const char *); |
ad3c9f2a | 292 | int printf(const char * __restrict, ...) __printflike(1, 2); |
9385eb3d A |
293 | int putc(int, FILE *); |
294 | int putchar(int); | |
295 | int puts(const char *); | |
296 | int remove(const char *); | |
974e3884 | 297 | int rename (const char *__old, const char *__new); |
9385eb3d | 298 | void rewind(FILE *); |
ad3c9f2a | 299 | int scanf(const char * __restrict, ...) __scanflike(1, 2); |
59e0d9fe A |
300 | void setbuf(FILE * __restrict, char * __restrict); |
301 | int setvbuf(FILE * __restrict, char * __restrict, int, size_t); | |
974e3884 | 302 | int sprintf(char * __restrict, const char * __restrict, ...) __printflike(2, 3) __swift_unavailable("Use snprintf instead."); |
ad3c9f2a | 303 | int sscanf(const char * __restrict, const char * __restrict, ...) __scanflike(2, 3); |
9385eb3d | 304 | FILE *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 |
310 | char *tmpnam(char *); |
311 | int ungetc(int, FILE *); | |
ad3c9f2a A |
312 | int vfprintf(FILE * __restrict, const char * __restrict, va_list) __printflike(2, 0); |
313 | int vprintf(const char * __restrict, va_list) __printflike(1, 0); | |
974e3884 | 314 | int 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 | 330 | char *ctermid(char *); |
1f2f436a A |
331 | #endif |
332 | ||
333 | #if defined(_DARWIN_UNLIMITED_STREAMS) || defined(_DARWIN_C_SOURCE) | |
334 | FILE *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 | 339 | FILE *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 */ | |
342 | FILE *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 | 346 | int 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 | 362 | int 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 | 364 | FILE *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 | 369 | FILE *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 */ | |
372 | FILE *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 | 391 | int __srget(FILE *); |
ad3c9f2a | 392 | int __svfscanf(FILE *, const char *, va_list) __scanflike(2, 0); |
9385eb3d | 393 | int __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 |
428 | void flockfile(FILE *); | |
429 | int ftrylockfile(FILE *); | |
430 | void funlockfile(FILE *); | |
431 | int getc_unlocked(FILE *); | |
432 | int getchar_unlocked(void); | |
433 | int putc_unlocked(int, FILE *); | |
434 | int putchar_unlocked(int); | |
435 | ||
436 | /* Removed in Issue 6 */ | |
437 | #if !defined(_POSIX_C_SOURCE) || _POSIX_C_SOURCE < 200112L | |
438 | int getw(FILE *); | |
439 | int 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 | 449 | char *tempnam(const char *__dir, const char *__prefix) __DARWIN_ALIAS(tempnam); |
1f2f436a A |
450 | //Begin-Libc |
451 | #else /* LIBC_ALIAS_TEMPNAM */ | |
974e3884 | 452 | char *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 |
477 | int fseeko(FILE * __stream, off_t __offset, int __whence); |
478 | off_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 |
484 | int snprintf(char * __restrict __str, size_t __size, const char * __restrict __format, ...) __printflike(3, 4); |
485 | int vfscanf(FILE * __restrict __stream, const char * __restrict __format, va_list) __scanflike(2, 0); | |
486 | int vscanf(const char * __restrict __format, va_list) __scanflike(1, 0); | |
487 | int vsnprintf(char * __restrict __str, size_t __size, const char * __restrict __format, va_list) __printflike(3, 0); | |
488 | int 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 |
502 | int dprintf(int, const char * __restrict, ...) __printflike(2, 3) __OSX_AVAILABLE_STARTING(__MAC_10_7, __IPHONE_4_3); |
503 | int vdprintf(int, const char * __restrict, va_list) __printflike(2, 0) __OSX_AVAILABLE_STARTING(__MAC_10_7, __IPHONE_4_3); | |
974e3884 A |
504 | ssize_t getdelim(char ** __restrict __linep, size_t * __restrict __linecapp, int __delimiter, FILE * __restrict __stream) __OSX_AVAILABLE_STARTING(__MAC_10_7, __IPHONE_4_3); |
505 | ssize_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 | |
515 | extern __const int sys_nerr; /* perror(3) external variables */ | |
516 | extern __const char *__const sys_errlist[]; | |
517 | ||
6465356a | 518 | int asprintf(char ** __restrict, const char * __restrict, ...) __printflike(2, 3); |
1f2f436a A |
519 | char *ctermid_r(char *); |
520 | char *fgetln(FILE *, size_t *); | |
521 | __const char *fmtcheck(const char *, const char *); | |
522 | int fpurge(FILE *); | |
523 | void setbuffer(FILE *, char *, int); | |
524 | int setlinebuf(FILE *); | |
6465356a | 525 | int vasprintf(char ** __restrict, const char * __restrict, va_list) __printflike(2, 0); |
1f2f436a A |
526 | FILE *zopen(const char *, const char *, int); |
527 | ||
528 | ||
529 | /* | |
530 | * Stdio function-access interface. | |
531 | */ | |
532 | FILE *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_ */ |