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
75typedef __darwin_off_t		fpos_t;
76
77#define	_FSTDIO			/* Define for new stdio with functions. */
78
79/*
80 * NB: to fit things in six character monocase externals, the stdio
81 * code uses the prefix `__s' for stdio objects, typically followed
82 * by a three-character attempt at a mnemonic.
83 */
84
85/* stdio buffers */
86struct __sbuf {
87	unsigned char	*_base;
88	int		_size;
89};
90
91/* hold a buncha junk that would grow the ABI */
92struct __sFILEX;
93
94/*
95 * stdio state variables.
96 *
97 * The following always hold:
98 *
99 *	if (_flags&(__SLBF|__SWR)) == (__SLBF|__SWR),
100 *		_lbfsize is -_bf._size, else _lbfsize is 0
101 *	if _flags&__SRD, _w is 0
102 *	if _flags&__SWR, _r is 0
103 *
104 * This ensures that the getc and putc macros (or inline functions) never
105 * try to write or read from a file that is in `read' or `write' mode.
106 * (Moreover, they can, and do, automatically switch from read mode to
107 * write mode, and back, on "r+" and "w+" files.)
108 *
109 * _lbfsize is used only to make the inline line-buffered output stream
110 * code as compact as possible.
111 *
112 * _ub, _up, and _ur are used when ungetc() pushes back more characters
113 * than fit in the current _bf, or when ungetc() pushes back a character
114 * that does not match the previous one in _bf.  When this happens,
115 * _ub._base becomes non-nil (i.e., a stream has ungetc() data iff
116 * _ub._base!=NULL) and _up and _ur save the current values of _p and _r.
117 *
118 * NB: see WARNING above before changing the layout of this structure!
119 */
120typedef	struct __sFILE {
121	unsigned char *_p;	/* current position in (some) buffer */
122	int	_r;		/* read space left for getc() */
123	int	_w;		/* write space left for putc() */
124	short	_flags;		/* flags, below; this FILE is free if 0 */
125	short	_file;		/* fileno, if Unix descriptor, else -1 */
126	struct	__sbuf _bf;	/* the buffer (at least 1 byte, if !NULL) */
127	int	_lbfsize;	/* 0 or -_bf._size, for inline putc */
128
129	/* operations */
130	void	*_cookie;	/* cookie passed to io functions */
131	int	(*_close)(void *);
132	int	(*_read) (void *, char *, int);
133	fpos_t	(*_seek) (void *, fpos_t, int);
134	int	(*_write)(void *, const char *, int);
135
136	/* separate buffer for long sequences of ungetc() */
137	struct	__sbuf _ub;	/* ungetc buffer */
138	struct __sFILEX *_extra; /* additions to FILE to not break ABI */
139	int	_ur;		/* saved _r when _r is counting ungetc data */
140
141	/* tricks to meet minimum requirements even when malloc() fails */
142	unsigned char _ubuf[3];	/* guarantee an ungetc() buffer */
143	unsigned char _nbuf[1];	/* guarantee a getc() buffer */
144
145	/* separate buffer for fgetln() when line crosses buffer boundary */
146	struct	__sbuf _lb;	/* buffer for fgetln() */
147
148	/* Unix stdio files get aligned to block boundaries on fseek() */
149	int	_blksize;	/* stat.st_blksize (may be != _bf._size) */
150	fpos_t	_offset;	/* current lseek offset (see WARNING) */
151} FILE;
152
153__BEGIN_DECLS
154extern FILE *__stdinp;
155extern FILE *__stdoutp;
156extern FILE *__stderrp;
157__END_DECLS
158
159#define	__SLBF	0x0001		/* line buffered */
160#define	__SNBF	0x0002		/* unbuffered */
161#define	__SRD	0x0004		/* OK to read */
162#define	__SWR	0x0008		/* OK to write */
163	/* RD and WR are never simultaneously asserted */
164#define	__SRW	0x0010		/* open for reading & writing */
165#define	__SEOF	0x0020		/* found EOF */
166#define	__SERR	0x0040		/* found error */
167#define	__SMBF	0x0080		/* _buf is from malloc */
168#define	__SAPP	0x0100		/* fdopen()ed in append mode */
169#define	__SSTR	0x0200		/* this is an sprintf/snprintf string */
170#define	__SOPT	0x0400		/* do fseek() optimisation */
171#define	__SNPT	0x0800		/* do not do fseek() optimisation */
172#define	__SOFF	0x1000		/* set iff _offset is in fact correct */
173#define	__SMOD	0x2000		/* true => fgetln modified _p text */
174#define __SALC  0x4000		/* allocate string space dynamically */
175#define __SIGN  0x8000		/* ignore this file in _fwalk */
176
177/*
178 * The following three definitions are for ANSI C, which took them
179 * from System V, which brilliantly took internal interface macros and
180 * made them official arguments to setvbuf(), without renaming them.
181 * Hence, these ugly _IOxxx names are *supposed* to appear in user code.
182 *
183 * Although numbered as their counterparts above, the implementation
184 * does not rely on this.
185 */
186#define	_IOFBF	0		/* setvbuf should set fully buffered */
187#define	_IOLBF	1		/* setvbuf should set line buffered */
188#define	_IONBF	2		/* setvbuf should set unbuffered */
189
190#define	BUFSIZ	1024		/* size of buffer used by setbuf */
191#define	EOF	(-1)
192
193				/* must be == _POSIX_STREAM_MAX <limits.h> */
194#define	FOPEN_MAX	20	/* must be <= OPEN_MAX <sys/syslimits.h> */
195#define	FILENAME_MAX	1024	/* must be <= PATH_MAX <sys/syslimits.h> */
196
197/* System V/ANSI C; this is the wrong way to do this, do *not* use these. */
198#ifndef _ANSI_SOURCE
199#define	P_tmpdir	"/var/tmp/"
200#endif
201#define	L_tmpnam	1024	/* XXX must be == PATH_MAX */
202#define	TMP_MAX		308915776
203
204#ifndef SEEK_SET
205#define	SEEK_SET	0	/* set file offset to offset */
206#endif
207#ifndef SEEK_CUR
208#define	SEEK_CUR	1	/* set file offset to current plus offset */
209#endif
210#ifndef SEEK_END
211#define	SEEK_END	2	/* set file offset to EOF plus offset */
212#endif
213
214#define	stdin	__stdinp
215#define	stdout	__stdoutp
216#define	stderr	__stderrp
217
218#ifdef _DARWIN_UNLIMITED_STREAMS
219#if defined(__IPHONE_OS_VERSION_MIN_REQUIRED) && __IPHONE_OS_VERSION_MIN_REQUIRED < __IPHONE_3_2
220#error "_DARWIN_UNLIMITED_STREAMS specified, but -miphoneos-version-min version does not support it."
221#elif defined(__MAC_OS_X_VERSION_MIN_REQUIRED) && __MAC_OS_X_VERSION_MIN_REQUIRED < __MAC_10_6
222#error "_DARWIN_UNLIMITED_STREAMS specified, but -mmacosx-version-min version does not support it."
223#endif
224#endif
225
226/* ANSI-C */
227
228__BEGIN_DECLS
229void	 clearerr(FILE *);
230int	 fclose(FILE *);
231int	 feof(FILE *);
232int	 ferror(FILE *);
233int	 fflush(FILE *);
234int	 fgetc(FILE *);
235int	 fgetpos(FILE * __restrict, fpos_t *);
236char	*fgets(char * __restrict, int, FILE *);
237#if defined(_DARWIN_UNLIMITED_STREAMS) || defined(_DARWIN_C_SOURCE)
238FILE	*fopen(const char * __restrict, const char * __restrict) __DARWIN_ALIAS_STARTING(__MAC_10_6, __IPHONE_3_2, __DARWIN_EXTSN(fopen));
239#else /* !_DARWIN_UNLIMITED_STREAMS && !_DARWIN_C_SOURCE */
240//Begin-Libc
241#ifndef LIBC_ALIAS_FOPEN
242//End-Libc
243FILE	*fopen(const char * __restrict, const char * __restrict) __DARWIN_ALIAS_STARTING(__MAC_10_6, __IPHONE_2_0, __DARWIN_ALIAS(fopen));
244//Begin-Libc
245#else /* LIBC_ALIAS_FOPEN */
246FILE	*fopen(const char * __restrict, const char * __restrict) LIBC_ALIAS(fopen);
247#endif /* !LIBC_ALIAS_FOPEN */
248//End-Libc
249#endif /* (DARWIN_UNLIMITED_STREAMS || _DARWIN_C_SOURCE) */
250int	 fprintf(FILE * __restrict, const char * __restrict, ...) __printflike(2, 3);
251int	 fputc(int, FILE *);
252//Begin-Libc
253#ifndef LIBC_ALIAS_FPUTS
254//End-Libc
255int	 fputs(const char * __restrict, FILE * __restrict) __DARWIN_ALIAS(fputs);
256//Begin-Libc
257#else /* LIBC_ALIAS_FPUTS */
258int	 fputs(const char * __restrict, FILE * __restrict) LIBC_ALIAS(fputs);
259#endif /* !LIBC_ALIAS_FPUTS */
260//End-Libc
261size_t	 fread(void * __restrict, size_t, size_t, FILE * __restrict);
262//Begin-Libc
263#ifndef LIBC_ALIAS_FREOPEN
264//End-Libc
265FILE	*freopen(const char * __restrict, const char * __restrict,
266                 FILE * __restrict) __DARWIN_ALIAS(freopen);
267//Begin-Libc
268#else /* LIBC_ALIAS_FREOPEN */
269FILE	*freopen(const char * __restrict, const char * __restrict,
270                 FILE * __restrict) LIBC_ALIAS(freopen);
271#endif /* !LIBC_ALIAS_FREOPEN */
272//End-Libc
273int	 fscanf(FILE * __restrict, const char * __restrict, ...) __scanflike(2, 3);
274int	 fseek(FILE *, long, int);
275int	 fsetpos(FILE *, const fpos_t *);
276long	 ftell(FILE *);
277//Begin-Libc
278#ifndef LIBC_ALIAS_FWRITE
279//End-Libc
280size_t	 fwrite(const void * __restrict, size_t, size_t, FILE * __restrict) __DARWIN_ALIAS(fwrite);
281//Begin-Libc
282#else /* LIBC_ALIAS_FWRITE */
283size_t	 fwrite(const void * __restrict, size_t, size_t, FILE * __restrict) LIBC_ALIAS(fwrite);
284#endif /* !LIBC_ALIAS_FWRITE */
285//End-Libc
286int	 getc(FILE *);
287int	 getchar(void);
288char	*gets(char *);
289void	 perror(const char *);
290int	 printf(const char * __restrict, ...) __printflike(1, 2);
291int	 putc(int, FILE *);
292int	 putchar(int);
293int	 puts(const char *);
294int	 remove(const char *);
295int	 rename (const char *, const char *);
296void	 rewind(FILE *);
297int	 scanf(const char * __restrict, ...) __scanflike(1, 2);
298void	 setbuf(FILE * __restrict, char * __restrict);
299int	 setvbuf(FILE * __restrict, char * __restrict, int, size_t);
300int	 sprintf(char * __restrict, const char * __restrict, ...) __printflike(2, 3);
301int	 sscanf(const char * __restrict, const char * __restrict, ...) __scanflike(2, 3);
302FILE	*tmpfile(void);
303
304#if !defined(_POSIX_C_SOURCE)
305__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.")
306#endif
307char	*tmpnam(char *);
308int	 ungetc(int, FILE *);
309int	 vfprintf(FILE * __restrict, const char * __restrict, va_list) __printflike(2, 0);
310int	 vprintf(const char * __restrict, va_list) __printflike(1, 0);
311int	 vsprintf(char * __restrict, const char * __restrict, va_list) __printflike(2, 0);
312__END_DECLS
313
314
315
316/* Additional functionality provided by:
317 * POSIX.1-1988
318 */
319
320#if __DARWIN_C_LEVEL >= 198808L
321#define	L_ctermid	1024	/* size for ctermid(); PATH_MAX */
322
323__BEGIN_DECLS
324#ifndef __CTERMID_DEFINED
325/* Multiply defined in stdio.h and unistd.h by SUS */
326#define __CTERMID_DEFINED 1
327char	*ctermid(char *);
328#endif
329
330#if defined(_DARWIN_UNLIMITED_STREAMS) || defined(_DARWIN_C_SOURCE)
331FILE	*fdopen(int, const char *) __DARWIN_ALIAS_STARTING(__MAC_10_6, __IPHONE_3_2, __DARWIN_EXTSN(fdopen));
332#else /* !_DARWIN_UNLIMITED_STREAMS && !_DARWIN_C_SOURCE */
333//Begin-Libc
334#ifndef LIBC_ALIAS_FDOPEN
335//End-Libc
336FILE	*fdopen(int, const char *) __DARWIN_ALIAS_STARTING(__MAC_10_6, __IPHONE_2_0, __DARWIN_ALIAS(fdopen));
337//Begin-Libc
338#else /* LIBC_ALIAS_FDOPEN */
339FILE	*fdopen(int, const char *) LIBC_ALIAS(fdopen);
340#endif /* !LIBC_ALIAS_FDOPEN */
341//End-Libc
342#endif /* (DARWIN_UNLIMITED_STREAMS || _DARWIN_C_SOURCE) */
343int	 fileno(FILE *);
344__END_DECLS
345#endif /* __DARWIN_C_LEVEL >= 198808L */
346
347
348/* Additional functionality provided by:
349 * POSIX.2-1992 C Language Binding Option
350 */
351
352#if __DARWIN_C_LEVEL >= 199209L
353__BEGIN_DECLS
354int	 pclose(FILE *);
355#if defined(_DARWIN_UNLIMITED_STREAMS) || defined(_DARWIN_C_SOURCE)
356FILE	*popen(const char *, const char *) __DARWIN_ALIAS_STARTING(__MAC_10_6, __IPHONE_3_2, __DARWIN_EXTSN(popen));
357#else /* !_DARWIN_UNLIMITED_STREAMS && !_DARWIN_C_SOURCE */
358//Begin-Libc
359#ifndef LIBC_ALIAS_POPEN
360//End-Libc
361FILE	*popen(const char *, const char *) __DARWIN_ALIAS_STARTING(__MAC_10_6, __IPHONE_2_0, __DARWIN_ALIAS(popen));
362//Begin-Libc
363#else /* LIBC_ALIAS_POPEN */
364FILE	*popen(const char *, const char *) LIBC_ALIAS(popen);
365#endif /* !LIBC_ALIAS_POPEN */
366//End-Libc
367#endif /* (DARWIN_UNLIMITED_STREAMS || _DARWIN_C_SOURCE) */
368__END_DECLS
369#endif /* __DARWIN_C_LEVEL >= 199209L */
370
371
372
373
374/* Additional functionality provided by:
375 * POSIX.1c-1995,
376 * POSIX.1i-1995,
377 * and the omnibus ISO/IEC 9945-1: 1996
378 */
379
380#if __DARWIN_C_LEVEL >= 199506L
381
382/* Functions internal to the implementation. */
383__BEGIN_DECLS
384int	__srget(FILE *);
385int	__svfscanf(FILE *, const char *, va_list) __scanflike(2, 0);
386int	__swbuf(int, FILE *);
387__END_DECLS
388
389/*
390 * The __sfoo macros are here so that we can
391 * define function versions in the C library.
392 */
393#define	__sgetc(p) (--(p)->_r < 0 ? __srget(p) : (int)(*(p)->_p++))
394#if defined(__GNUC__) && defined(__STDC__)
395__header_always_inline int __sputc(int _c, FILE *_p) {
396	if (--_p->_w >= 0 || (_p->_w >= _p->_lbfsize && (char)_c != '\n'))
397		return (*_p->_p++ = _c);
398	else
399		return (__swbuf(_c, _p));
400}
401#else
402/*
403 * This has been tuned to generate reasonable code on the vax using pcc.
404 */
405#define	__sputc(c, p) \
406	(--(p)->_w < 0 ? \
407		(p)->_w >= (p)->_lbfsize ? \
408			(*(p)->_p = (c)), *(p)->_p != '\n' ? \
409				(int)*(p)->_p++ : \
410				__swbuf('\n', p) : \
411			__swbuf((int)(c), p) : \
412		(*(p)->_p = (c), (int)*(p)->_p++))
413#endif
414
415#define	__sfeof(p)	(((p)->_flags & __SEOF) != 0)
416#define	__sferror(p)	(((p)->_flags & __SERR) != 0)
417#define	__sclearerr(p)	((void)((p)->_flags &= ~(__SERR|__SEOF)))
418#define	__sfileno(p)	((p)->_file)
419
420__BEGIN_DECLS
421void	 flockfile(FILE *);
422int	 ftrylockfile(FILE *);
423void	 funlockfile(FILE *);
424int	 getc_unlocked(FILE *);
425int	 getchar_unlocked(void);
426int	 putc_unlocked(int, FILE *);
427int	 putchar_unlocked(int);
428
429/* Removed in Issue 6 */
430#if !defined(_POSIX_C_SOURCE) || _POSIX_C_SOURCE < 200112L
431int	 getw(FILE *);
432int	 putw(int, FILE *);
433#endif
434
435#if !defined(_POSIX_C_SOURCE)
436__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.")
437#endif
438//Begin-Libc
439#ifndef LIBC_ALIAS_TEMPNAM
440//End-Libc
441char	*tempnam(const char *, const char *) __DARWIN_ALIAS(tempnam);
442//Begin-Libc
443#else /* LIBC_ALIAS_TEMPNAM */
444char	*tempnam(const char *, const char *) LIBC_ALIAS(tempnam);
445#endif /* !LIBC_ALIAS_TEMPNAM */
446//End-Libc
447__END_DECLS
448
449#ifndef lint
450#define	getc_unlocked(fp)	__sgetc(fp)
451#define putc_unlocked(x, fp)	__sputc(x, fp)
452#endif /* lint */
453
454#define	getchar_unlocked()	getc_unlocked(stdin)
455#define	putchar_unlocked(x)	putc_unlocked(x, stdout)
456#endif /* __DARWIN_C_LEVEL >= 199506L */
457
458
459
460/* Additional functionality provided by:
461 * POSIX.1-2001
462 * ISO C99
463 */
464
465#if __DARWIN_C_LEVEL >= 200112L
466#include <sys/_types/_off_t.h>
467
468__BEGIN_DECLS
469int	 fseeko(FILE *, off_t, int);
470off_t	 ftello(FILE *);
471__END_DECLS
472#endif /* __DARWIN_C_LEVEL >= 200112L */
473
474#if __DARWIN_C_LEVEL >= 200112L || defined(_C99_SOURCE) || defined(__cplusplus)
475__BEGIN_DECLS
476int	 snprintf(char * __restrict, size_t, const char * __restrict, ...) __printflike(3, 4);
477int	 vfscanf(FILE * __restrict, const char * __restrict, va_list) __scanflike(2, 0);
478int	 vscanf(const char * __restrict, va_list) __scanflike(1, 0);
479int	 vsnprintf(char * __restrict, size_t, const char * __restrict, va_list) __printflike(3, 0);
480int	 vsscanf(const char * __restrict, const char * __restrict, va_list) __scanflike(2, 0);
481__END_DECLS
482#endif /* __DARWIN_C_LEVEL >= 200112L || defined(_C99_SOURCE) || defined(__cplusplus) */
483
484
485
486/* Additional functionality provided by:
487 * POSIX.1-2008
488 */
489
490#if __DARWIN_C_LEVEL >= 200809L
491#include <sys/_types/_ssize_t.h>
492
493__BEGIN_DECLS
494int	dprintf(int, const char * __restrict, ...) __printflike(2, 3) __OSX_AVAILABLE_STARTING(__MAC_10_7, __IPHONE_4_3);
495int	vdprintf(int, const char * __restrict, va_list) __printflike(2, 0) __OSX_AVAILABLE_STARTING(__MAC_10_7, __IPHONE_4_3);
496ssize_t getdelim(char ** __restrict, size_t * __restrict, int, FILE * __restrict) __OSX_AVAILABLE_STARTING(__MAC_10_7, __IPHONE_4_3);
497ssize_t getline(char ** __restrict, size_t * __restrict, FILE * __restrict) __OSX_AVAILABLE_STARTING(__MAC_10_7, __IPHONE_4_3);
498__END_DECLS
499#endif /* __DARWIN_C_LEVEL >= 200809L */
500
501
502
503/* Darwin extensions */
504
505#if __DARWIN_C_LEVEL >= __DARWIN_C_FULL
506__BEGIN_DECLS
507extern __const int sys_nerr;		/* perror(3) external variables */
508extern __const char *__const sys_errlist[];
509
510int	 asprintf(char ** __restrict, const char * __restrict, ...) __printflike(2, 3);
511char	*ctermid_r(char *);
512char	*fgetln(FILE *, size_t *);
513__const char *fmtcheck(const char *, const char *);
514int	 fpurge(FILE *);
515void	 setbuffer(FILE *, char *, int);
516int	 setlinebuf(FILE *);
517int	 vasprintf(char ** __restrict, const char * __restrict, va_list) __printflike(2, 0);
518FILE	*zopen(const char *, const char *, int);
519
520
521/*
522 * Stdio function-access interface.
523 */
524FILE	*funopen(const void *,
525                 int (*)(void *, char *, int),
526                 int (*)(void *, const char *, int),
527                 fpos_t (*)(void *, fpos_t, int),
528                 int (*)(void *));
529__END_DECLS
530#define	fropen(cookie, fn) funopen(cookie, fn, 0, 0, 0)
531#define	fwopen(cookie, fn) funopen(cookie, 0, fn, 0, 0)
532
533#define	feof_unlocked(p)	__sfeof(p)
534#define	ferror_unlocked(p)	__sferror(p)
535#define	clearerr_unlocked(p)	__sclearerr(p)
536#define	fileno_unlocked(p)	__sfileno(p)
537
538#endif /* __DARWIN_C_LEVEL >= __DARWIN_C_FULL */
539
540
541#ifdef _USE_EXTENDED_LOCALES_
542#include <xlocale/_stdio.h>
543#endif /* _USE_EXTENDED_LOCALES_ */
544
545#if defined (__GNUC__) && _FORTIFY_SOURCE > 0 && !defined (__cplusplus)
546/* Security checking functions.  */
547#include <secure/_stdio.h>
548#endif
549
550#endif /* _STDIO_H_ */
551