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: