]>
Commit | Line | Data |
---|---|---|
5b2abdfb A |
1 | /* |
2 | * Copyright (c) 2000 Apple Computer, Inc. All rights reserved. | |
3 | * | |
4 | * @APPLE_LICENSE_HEADER_START@ | |
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. | |
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 | |
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. | |
5b2abdfb A |
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 | ||
59e0d9fe | 64 | #include <_types.h> |
5b2abdfb A |
65 | #include <sys/cdefs.h> |
66 | ||
3d9156a7 A |
67 | #ifndef _VA_LIST |
68 | #define _VA_LIST | |
69 | /* DO NOT REMOVE THIS COMMENT: fixincludes needs to see: | |
70 | * __gnuc_va_list and include <stdarg.h> */ | |
71 | typedef __darwin_va_list va_list; | |
72 | #endif | |
73 | ||
74 | #ifndef _SIZE_T | |
75 | #define _SIZE_T | |
76 | typedef __darwin_size_t size_t; | |
5b2abdfb A |
77 | #endif |
78 | ||
79 | #ifndef NULL | |
3d9156a7 | 80 | #define NULL __DARWIN_NULL |
59e0d9fe | 81 | #endif /* ! NULL */ |
5b2abdfb | 82 | |
5b2abdfb | 83 | #if !defined(_ANSI_SOURCE) && !defined(__STRICT_ANSI__) |
3d9156a7 | 84 | typedef __darwin_off_t fpos_t; |
5b2abdfb | 85 | #else |
3d9156a7 | 86 | typedef __int64_t fpos_t; |
5b2abdfb A |
87 | #endif |
88 | ||
89 | #define _FSTDIO /* Define for new stdio with functions. */ | |
90 | ||
91 | /* | |
92 | * NB: to fit things in six character monocase externals, the stdio | |
93 | * code uses the prefix `__s' for stdio objects, typically followed | |
94 | * by a three-character attempt at a mnemonic. | |
95 | */ | |
96 | ||
97 | /* stdio buffers */ | |
98 | struct __sbuf { | |
3d9156a7 A |
99 | unsigned char *_base; |
100 | int _size; | |
5b2abdfb A |
101 | }; |
102 | ||
9385eb3d A |
103 | /* hold a buncha junk that would grow the ABI */ |
104 | struct __sFILEX; | |
105 | ||
5b2abdfb A |
106 | /* |
107 | * stdio state variables. | |
108 | * | |
109 | * The following always hold: | |
110 | * | |
111 | * if (_flags&(__SLBF|__SWR)) == (__SLBF|__SWR), | |
112 | * _lbfsize is -_bf._size, else _lbfsize is 0 | |
113 | * if _flags&__SRD, _w is 0 | |
114 | * if _flags&__SWR, _r is 0 | |
115 | * | |
116 | * This ensures that the getc and putc macros (or inline functions) never | |
117 | * try to write or read from a file that is in `read' or `write' mode. | |
118 | * (Moreover, they can, and do, automatically switch from read mode to | |
119 | * write mode, and back, on "r+" and "w+" files.) | |
120 | * | |
121 | * _lbfsize is used only to make the inline line-buffered output stream | |
122 | * code as compact as possible. | |
123 | * | |
124 | * _ub, _up, and _ur are used when ungetc() pushes back more characters | |
125 | * than fit in the current _bf, or when ungetc() pushes back a character | |
126 | * that does not match the previous one in _bf. When this happens, | |
127 | * _ub._base becomes non-nil (i.e., a stream has ungetc() data iff | |
128 | * _ub._base!=NULL) and _up and _ur save the current values of _p and _r. | |
129 | * | |
130 | * NB: see WARNING above before changing the layout of this structure! | |
131 | */ | |
132 | typedef struct __sFILE { | |
133 | unsigned char *_p; /* current position in (some) buffer */ | |
134 | int _r; /* read space left for getc() */ | |
135 | int _w; /* write space left for putc() */ | |
136 | short _flags; /* flags, below; this FILE is free if 0 */ | |
137 | short _file; /* fileno, if Unix descriptor, else -1 */ | |
138 | struct __sbuf _bf; /* the buffer (at least 1 byte, if !NULL) */ | |
139 | int _lbfsize; /* 0 or -_bf._size, for inline putc */ | |
140 | ||
141 | /* operations */ | |
142 | void *_cookie; /* cookie passed to io functions */ | |
9385eb3d A |
143 | int (*_close)(void *); |
144 | int (*_read) (void *, char *, int); | |
145 | fpos_t (*_seek) (void *, fpos_t, int); | |
146 | int (*_write)(void *, const char *, int); | |
5b2abdfb A |
147 | |
148 | /* separate buffer for long sequences of ungetc() */ | |
149 | struct __sbuf _ub; /* ungetc buffer */ | |
9385eb3d | 150 | struct __sFILEX *_extra; /* additions to FILE to not break ABI */ |
5b2abdfb A |
151 | int _ur; /* saved _r when _r is counting ungetc data */ |
152 | ||
153 | /* tricks to meet minimum requirements even when malloc() fails */ | |
154 | unsigned char _ubuf[3]; /* guarantee an ungetc() buffer */ | |
155 | unsigned char _nbuf[1]; /* guarantee a getc() buffer */ | |
156 | ||
157 | /* separate buffer for fgetln() when line crosses buffer boundary */ | |
158 | struct __sbuf _lb; /* buffer for fgetln() */ | |
159 | ||
160 | /* Unix stdio files get aligned to block boundaries on fseek() */ | |
161 | int _blksize; /* stat.st_blksize (may be != _bf._size) */ | |
162 | fpos_t _offset; /* current lseek offset (see WARNING) */ | |
163 | } FILE; | |
164 | ||
165 | __BEGIN_DECLS | |
3d9156a7 A |
166 | #if __DARWIN_UNIX03 |
167 | extern FILE *__stdinp; | |
168 | extern FILE *__stdoutp; | |
169 | extern FILE *__stderrp; | |
170 | #else /* !__DARWIN_UNIX03 */ | |
5b2abdfb | 171 | extern FILE __sF[]; |
3d9156a7 | 172 | #endif /* __DARWIN_UNIX03 */ |
5b2abdfb A |
173 | __END_DECLS |
174 | ||
175 | #define __SLBF 0x0001 /* line buffered */ | |
176 | #define __SNBF 0x0002 /* unbuffered */ | |
177 | #define __SRD 0x0004 /* OK to read */ | |
178 | #define __SWR 0x0008 /* OK to write */ | |
179 | /* RD and WR are never simultaneously asserted */ | |
180 | #define __SRW 0x0010 /* open for reading & writing */ | |
181 | #define __SEOF 0x0020 /* found EOF */ | |
182 | #define __SERR 0x0040 /* found error */ | |
183 | #define __SMBF 0x0080 /* _buf is from malloc */ | |
184 | #define __SAPP 0x0100 /* fdopen()ed in append mode */ | |
185 | #define __SSTR 0x0200 /* this is an sprintf/snprintf string */ | |
186 | #define __SOPT 0x0400 /* do fseek() optimisation */ | |
187 | #define __SNPT 0x0800 /* do not do fseek() optimisation */ | |
188 | #define __SOFF 0x1000 /* set iff _offset is in fact correct */ | |
189 | #define __SMOD 0x2000 /* true => fgetln modified _p text */ | |
190 | #define __SALC 0x4000 /* allocate string space dynamically */ | |
9385eb3d | 191 | #define __SIGN 0x8000 /* ignore this file in _fwalk */ |
5b2abdfb A |
192 | |
193 | /* | |
194 | * The following three definitions are for ANSI C, which took them | |
195 | * from System V, which brilliantly took internal interface macros and | |
196 | * made them official arguments to setvbuf(), without renaming them. | |
197 | * Hence, these ugly _IOxxx names are *supposed* to appear in user code. | |
198 | * | |
199 | * Although numbered as their counterparts above, the implementation | |
200 | * does not rely on this. | |
201 | */ | |
202 | #define _IOFBF 0 /* setvbuf should set fully buffered */ | |
203 | #define _IOLBF 1 /* setvbuf should set line buffered */ | |
204 | #define _IONBF 2 /* setvbuf should set unbuffered */ | |
205 | ||
206 | #define BUFSIZ 1024 /* size of buffer used by setbuf */ | |
207 | #define EOF (-1) | |
208 | ||
209 | /* | |
210 | * FOPEN_MAX is a minimum maximum, and is the number of streams that | |
211 | * stdio can provide without attempting to allocate further resources | |
212 | * (which could fail). Do not use this for anything. | |
213 | */ | |
214 | /* must be == _POSIX_STREAM_MAX <limits.h> */ | |
215 | #define FOPEN_MAX 20 /* must be <= OPEN_MAX <sys/syslimits.h> */ | |
216 | #define FILENAME_MAX 1024 /* must be <= PATH_MAX <sys/syslimits.h> */ | |
217 | ||
218 | /* System V/ANSI C; this is the wrong way to do this, do *not* use these. */ | |
219 | #ifndef _ANSI_SOURCE | |
220 | #define P_tmpdir "/var/tmp/" | |
221 | #endif | |
222 | #define L_tmpnam 1024 /* XXX must be == PATH_MAX */ | |
223 | #define TMP_MAX 308915776 | |
224 | ||
225 | #ifndef SEEK_SET | |
226 | #define SEEK_SET 0 /* set file offset to offset */ | |
227 | #endif | |
228 | #ifndef SEEK_CUR | |
229 | #define SEEK_CUR 1 /* set file offset to current plus offset */ | |
230 | #endif | |
231 | #ifndef SEEK_END | |
232 | #define SEEK_END 2 /* set file offset to EOF plus offset */ | |
233 | #endif | |
234 | ||
3d9156a7 A |
235 | #if __DARWIN_UNIX03 |
236 | #define stdin __stdinp | |
237 | #define stdout __stdoutp | |
238 | #define stderr __stderrp | |
239 | #else /* !__DARWIN_UNIX03 */ | |
59e0d9fe A |
240 | #define stdin (&__sF[0]) |
241 | #define stdout (&__sF[1]) | |
242 | #define stderr (&__sF[2]) | |
3d9156a7 | 243 | #endif /* __DARWIN_UNIX03 */ |
5b2abdfb A |
244 | |
245 | /* | |
246 | * Functions defined in ANSI C standard. | |
247 | */ | |
248 | __BEGIN_DECLS | |
9385eb3d A |
249 | void clearerr(FILE *); |
250 | int fclose(FILE *); | |
251 | int feof(FILE *); | |
252 | int ferror(FILE *); | |
253 | int fflush(FILE *); | |
254 | int fgetc(FILE *); | |
59e0d9fe A |
255 | int fgetpos(FILE * __restrict, fpos_t *); |
256 | char *fgets(char * __restrict, int, FILE *); | |
257 | FILE *fopen(const char * __restrict, const char * __restrict); | |
3d9156a7 | 258 | int fprintf(FILE * __restrict, const char * __restrict, ...) __DARWIN_LDBL_COMPAT(fprintf); |
9385eb3d | 259 | int fputc(int, FILE *); |
59e0d9fe A |
260 | int fputs(const char * __restrict, FILE * __restrict); |
261 | size_t fread(void * __restrict, size_t, size_t, FILE * __restrict); | |
262 | FILE *freopen(const char * __restrict, const char * __restrict, | |
3d9156a7 A |
263 | FILE * __restrict) __DARWIN_ALIAS(freopen); |
264 | int fscanf(FILE * __restrict, const char * __restrict, ...) __DARWIN_LDBL_COMPAT(fscanf); | |
9385eb3d A |
265 | int fseek(FILE *, long, int); |
266 | int fsetpos(FILE *, const fpos_t *); | |
267 | long ftell(FILE *); | |
3d9156a7 | 268 | size_t fwrite(const void * __restrict, size_t, size_t, FILE * __restrict) __DARWIN_ALIAS(fwrite); |
9385eb3d A |
269 | int getc(FILE *); |
270 | int getchar(void); | |
271 | char *gets(char *); | |
3d9156a7 | 272 | #if !defined(_ANSI_SOURCE) && !defined(_POSIX_C_SOURCE) |
5b2abdfb A |
273 | extern __const int sys_nerr; /* perror(3) external variables */ |
274 | extern __const char *__const sys_errlist[]; | |
275 | #endif | |
9385eb3d | 276 | void perror(const char *); |
3d9156a7 | 277 | int printf(const char * __restrict, ...) __DARWIN_LDBL_COMPAT(printf); |
9385eb3d A |
278 | int putc(int, FILE *); |
279 | int putchar(int); | |
280 | int puts(const char *); | |
281 | int remove(const char *); | |
282 | int rename (const char *, const char *); | |
283 | void rewind(FILE *); | |
3d9156a7 | 284 | int scanf(const char * __restrict, ...) __DARWIN_LDBL_COMPAT(scanf); |
59e0d9fe A |
285 | void setbuf(FILE * __restrict, char * __restrict); |
286 | int setvbuf(FILE * __restrict, char * __restrict, int, size_t); | |
3d9156a7 A |
287 | int sprintf(char * __restrict, const char * __restrict, ...) __DARWIN_LDBL_COMPAT(sprintf); |
288 | int sscanf(const char * __restrict, const char * __restrict, ...) __DARWIN_LDBL_COMPAT(sscanf); | |
9385eb3d A |
289 | FILE *tmpfile(void); |
290 | char *tmpnam(char *); | |
291 | int ungetc(int, FILE *); | |
3d9156a7 A |
292 | int vfprintf(FILE * __restrict, const char * __restrict, va_list) __DARWIN_LDBL_COMPAT(vfprintf); |
293 | int vprintf(const char * __restrict, va_list) __DARWIN_LDBL_COMPAT(vprintf); | |
294 | int vsprintf(char * __restrict, const char * __restrict, va_list) __DARWIN_LDBL_COMPAT(vsprintf); | |
295 | #if !defined(_ANSI_SOURCE) && !defined(_POSIX_C_SOURCE) | |
296 | int asprintf(char **, const char *, ...) __DARWIN_LDBL_COMPAT(asprintf); | |
297 | int vasprintf(char **, const char *, va_list) __DARWIN_LDBL_COMPAT(vasprintf); | |
59e0d9fe | 298 | #endif |
5b2abdfb A |
299 | __END_DECLS |
300 | ||
301 | /* | |
302 | * Functions defined in POSIX 1003.1. | |
303 | */ | |
304 | #ifndef _ANSI_SOURCE | |
305 | #define L_cuserid 9 /* size for cuserid(); UT_NAMESIZE + 1 */ | |
306 | #define L_ctermid 1024 /* size for ctermid(); PATH_MAX */ | |
307 | ||
308 | __BEGIN_DECLS | |
9385eb3d | 309 | char *ctermid(char *); |
3d9156a7 | 310 | #ifndef _POSIX_C_SOURCE |
9385eb3d | 311 | char *ctermid_r(char *); |
59e0d9fe | 312 | #endif /* not POSIX */ |
9385eb3d | 313 | FILE *fdopen(int, const char *); |
3d9156a7 | 314 | #ifndef _POSIX_C_SOURCE |
9385eb3d | 315 | char *fgetln(FILE *, size_t *); |
59e0d9fe A |
316 | #endif /* not POSIX */ |
317 | int fileno(FILE *); | |
9385eb3d | 318 | void flockfile(FILE *); |
3d9156a7 | 319 | #ifndef _POSIX_C_SOURCE |
9385eb3d A |
320 | __const char |
321 | *fmtcheck(const char *, const char *); | |
322 | int fpurge(FILE *); | |
59e0d9fe | 323 | #endif /* not POSIX */ |
9385eb3d A |
324 | int fseeko(FILE *, fpos_t, int); |
325 | fpos_t ftello(FILE *); | |
326 | int ftrylockfile(FILE *); | |
327 | void funlockfile(FILE *); | |
328 | int getc_unlocked(FILE *); | |
329 | int getchar_unlocked(void); | |
3d9156a7 | 330 | #ifndef _POSIX_C_SOURCE |
9385eb3d | 331 | int getw(FILE *); |
59e0d9fe | 332 | #endif /* not POSIX */ |
9385eb3d A |
333 | int pclose(FILE *); |
334 | FILE *popen(const char *, const char *); | |
335 | int putc_unlocked(int, FILE *); | |
336 | int putchar_unlocked(int); | |
3d9156a7 | 337 | #ifndef _POSIX_C_SOURCE |
9385eb3d A |
338 | int putw(int, FILE *); |
339 | void setbuffer(FILE *, char *, int); | |
340 | int setlinebuf(FILE *); | |
59e0d9fe | 341 | #endif /* not POSIX */ |
3d9156a7 | 342 | int snprintf(char * __restrict, size_t, const char * __restrict, ...) __DARWIN_LDBL_COMPAT(snprintf); |
9385eb3d | 343 | char *tempnam(const char *, const char *); |
3d9156a7 A |
344 | int vfscanf(FILE * __restrict, const char * __restrict, va_list) __DARWIN_LDBL_COMPAT(vfscanf); |
345 | int vscanf(const char * __restrict, va_list) __DARWIN_LDBL_COMPAT(vscanf); | |
346 | int vsnprintf(char * __restrict, size_t, const char * __restrict, va_list) __DARWIN_LDBL_COMPAT(vsnprintf); | |
347 | int vsscanf(const char * __restrict, const char * __restrict, va_list) __DARWIN_LDBL_COMPAT(vsscanf); | |
348 | #ifndef _POSIX_C_SOURCE | |
9385eb3d | 349 | FILE *zopen(const char *, const char *, int); |
59e0d9fe | 350 | #endif /* not POSIX */ |
5b2abdfb A |
351 | __END_DECLS |
352 | ||
5b2abdfb A |
353 | /* |
354 | * Stdio function-access interface. | |
355 | */ | |
3d9156a7 | 356 | #ifndef _POSIX_C_SOURCE |
5b2abdfb | 357 | __BEGIN_DECLS |
9385eb3d | 358 | FILE *funopen(const void *, |
5b2abdfb A |
359 | int (*)(void *, char *, int), |
360 | int (*)(void *, const char *, int), | |
361 | fpos_t (*)(void *, fpos_t, int), | |
9385eb3d | 362 | int (*)(void *)); |
5b2abdfb A |
363 | __END_DECLS |
364 | #define fropen(cookie, fn) funopen(cookie, fn, 0, 0, 0) | |
365 | #define fwopen(cookie, fn) funopen(cookie, 0, fn, 0, 0) | |
59e0d9fe A |
366 | #endif /* not POSIX */ |
367 | #endif /* not ANSI */ | |
5b2abdfb A |
368 | |
369 | /* | |
370 | * Functions internal to the implementation. | |
371 | */ | |
372 | __BEGIN_DECLS | |
9385eb3d | 373 | int __srget(FILE *); |
3d9156a7 | 374 | int __svfscanf(FILE *, const char *, va_list) __DARWIN_LDBL_COMPAT(__svfscanf); |
9385eb3d | 375 | int __swbuf(int, FILE *); |
5b2abdfb A |
376 | __END_DECLS |
377 | ||
378 | /* | |
379 | * The __sfoo macros are here so that we can | |
380 | * define function versions in the C library. | |
381 | */ | |
382 | #define __sgetc(p) (--(p)->_r < 0 ? __srget(p) : (int)(*(p)->_p++)) | |
383 | #if defined(__GNUC__) && defined(__STDC__) | |
384 | static __inline int __sputc(int _c, FILE *_p) { | |
385 | if (--_p->_w >= 0 || (_p->_w >= _p->_lbfsize && (char)_c != '\n')) | |
386 | return (*_p->_p++ = _c); | |
387 | else | |
388 | return (__swbuf(_c, _p)); | |
389 | } | |
390 | #else | |
391 | /* | |
392 | * This has been tuned to generate reasonable code on the vax using pcc. | |
393 | */ | |
394 | #define __sputc(c, p) \ | |
395 | (--(p)->_w < 0 ? \ | |
396 | (p)->_w >= (p)->_lbfsize ? \ | |
397 | (*(p)->_p = (c)), *(p)->_p != '\n' ? \ | |
398 | (int)*(p)->_p++ : \ | |
399 | __swbuf('\n', p) : \ | |
400 | __swbuf((int)(c), p) : \ | |
401 | (*(p)->_p = (c), (int)*(p)->_p++)) | |
402 | #endif | |
403 | ||
404 | #define __sfeof(p) (((p)->_flags & __SEOF) != 0) | |
405 | #define __sferror(p) (((p)->_flags & __SERR) != 0) | |
406 | #define __sclearerr(p) ((void)((p)->_flags &= ~(__SERR|__SEOF))) | |
407 | #define __sfileno(p) ((p)->_file) | |
408 | ||
59e0d9fe | 409 | #ifndef _ANSI_SOURCE |
3d9156a7 | 410 | #ifndef _POSIX_C_SOURCE |
9385eb3d A |
411 | #define feof_unlocked(p) __sfeof(p) |
412 | #define ferror_unlocked(p) __sferror(p) | |
413 | #define clearerr_unlocked(p) __sclearerr(p) | |
9385eb3d | 414 | #define fileno_unlocked(p) __sfileno(p) |
59e0d9fe | 415 | #endif /* not POSIX */ |
5b2abdfb A |
416 | |
417 | #ifndef lint | |
9385eb3d A |
418 | #define getc_unlocked(fp) __sgetc(fp) |
419 | #define putc_unlocked(x, fp) __sputc(x, fp) | |
5b2abdfb A |
420 | #endif /* lint */ |
421 | ||
9385eb3d A |
422 | #define getchar_unlocked() getc_unlocked(stdin) |
423 | #define putchar_unlocked(x) putc_unlocked(x, stdout) | |
59e0d9fe A |
424 | #endif /* not ANSI */ |
425 | ||
3d9156a7 A |
426 | #ifdef _USE_EXTENDED_LOCALES_ |
427 | #include <xlocale/_stdio.h> | |
428 | #endif /* _USE_EXTENDED_LOCALES_ */ | |
429 | ||
5b2abdfb | 430 | #endif /* _STDIO_H_ */ |