File: /usr/include/stdio.h

Green shading in the line number column means the source is part of the translation unit, red means it is conditionally excluded. Highlighted line numbers link to the translation unit page. Highlighted macros link to the macro page.

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