root / lab4 / .minix-src / include / stdio.h @ 14
History | View | Annotate | Download (19.2 KB)
1 | 13 | up20180614 | /* $NetBSD: stdio.h,v 1.96 2015/03/24 07:44:52 wiz Exp $ */
|
---|---|---|---|
2 | |||
3 | /*-
|
||
4 | * Copyright (c) 1990, 1993
|
||
5 | * The Regents of the University of California. All rights reserved.
|
||
6 | *
|
||
7 | * This code is derived from software contributed to Berkeley by
|
||
8 | * Chris Torek.
|
||
9 | *
|
||
10 | * Redistribution and use in source and binary forms, with or without
|
||
11 | * modification, are permitted provided that the following conditions
|
||
12 | * are met:
|
||
13 | * 1. Redistributions of source code must retain the above copyright
|
||
14 | * notice, this list of conditions and the following disclaimer.
|
||
15 | * 2. Redistributions in binary form must reproduce the above copyright
|
||
16 | * notice, this list of conditions and the following disclaimer in the
|
||
17 | * documentation and/or other materials provided with the distribution.
|
||
18 | * 3. Neither the name of the University nor the names of its contributors
|
||
19 | * may be used to endorse or promote products derived from this software
|
||
20 | * without specific prior written permission.
|
||
21 | *
|
||
22 | * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
|
||
23 | * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
||
24 | * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
|
||
25 | * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
|
||
26 | * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
|
||
27 | * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
|
||
28 | * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
|
||
29 | * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
|
||
30 | * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
|
||
31 | * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
|
||
32 | * SUCH DAMAGE.
|
||
33 | *
|
||
34 | * @(#)stdio.h 8.5 (Berkeley) 4/29/95
|
||
35 | */
|
||
36 | |||
37 | #ifndef _STDIO_H_
|
||
38 | #define _STDIO_H_
|
||
39 | |||
40 | #include <sys/cdefs.h> |
||
41 | #include <sys/featuretest.h> |
||
42 | #include <sys/ansi.h> |
||
43 | |||
44 | #ifdef _BSD_SIZE_T_
|
||
45 | typedef _BSD_SIZE_T_ size_t;
|
||
46 | #undef _BSD_SIZE_T_
|
||
47 | #endif
|
||
48 | #ifdef _BSD_SSIZE_T_
|
||
49 | typedef _BSD_SSIZE_T_ ssize_t;
|
||
50 | #undef _BSD_SSIZE_T_
|
||
51 | #endif
|
||
52 | |||
53 | #if defined(_POSIX_C_SOURCE)
|
||
54 | #ifndef __VA_LIST_DECLARED
|
||
55 | typedef __va_list va_list;
|
||
56 | #define __VA_LIST_DECLARED
|
||
57 | #endif
|
||
58 | #endif
|
||
59 | |||
60 | #include <sys/null.h> |
||
61 | |||
62 | /*
|
||
63 | * This is fairly grotesque, but pure ANSI code must not inspect the
|
||
64 | * innards of an fpos_t anyway. The library internally uses off_t,
|
||
65 | * which we assume is exactly as big as eight chars.
|
||
66 | */
|
||
67 | typedef struct __sfpos { |
||
68 | __off_t _pos; |
||
69 | __mbstate_t _mbstate_in, _mbstate_out; |
||
70 | } fpos_t; |
||
71 | |||
72 | #define _FSTDIO /* Define for new stdio with functions. */ |
||
73 | |||
74 | /*
|
||
75 | * NB: to fit things in six character monocase externals, the stdio
|
||
76 | * code uses the prefix `__s' for stdio objects, typically followed
|
||
77 | * by a three-character attempt at a mnemonic.
|
||
78 | */
|
||
79 | |||
80 | /* stdio buffers */
|
||
81 | struct __sbuf {
|
||
82 | unsigned char *_base; |
||
83 | int _size;
|
||
84 | }; |
||
85 | |||
86 | /*
|
||
87 | * stdio state variables.
|
||
88 | *
|
||
89 | * The following always hold:
|
||
90 | *
|
||
91 | * if (_flags&(__SLBF|__SWR)) == (__SLBF|__SWR),
|
||
92 | * _lbfsize is -_bf._size, else _lbfsize is 0
|
||
93 | * if _flags&__SRD, _w is 0
|
||
94 | * if _flags&__SWR, _r is 0
|
||
95 | *
|
||
96 | * This ensures that the getc and putc macros (or inline functions) never
|
||
97 | * try to write or read from a file that is in `read' or `write' mode.
|
||
98 | * (Moreover, they can, and do, automatically switch from read mode to
|
||
99 | * write mode, and back, on "r+" and "w+" files.)
|
||
100 | *
|
||
101 | * _lbfsize is used only to make the inline line-buffered output stream
|
||
102 | * code as compact as possible.
|
||
103 | *
|
||
104 | * _ub, _up, and _ur are used when ungetc() pushes back more characters
|
||
105 | * than fit in the current _bf, or when ungetc() pushes back a character
|
||
106 | * that does not match the previous one in _bf. When this happens,
|
||
107 | * _ub._base becomes non-nil (i.e., a stream has ungetc() data iff
|
||
108 | * _ub._base!=NULL) and _up and _ur save the current values of _p and _r.
|
||
109 | *
|
||
110 | * NB: see WARNING above before changing the layout of this structure!
|
||
111 | */
|
||
112 | typedef struct __sFILE { |
||
113 | unsigned char *_p; /* current position in (some) buffer */ |
||
114 | int _r; /* read space left for getc() */ |
||
115 | int _w; /* write space left for putc() */ |
||
116 | unsigned short _flags; /* flags, below; this FILE is free if 0 */ |
||
117 | short _file; /* fileno, if Unix descriptor, else -1 */ |
||
118 | struct __sbuf _bf; /* the buffer (at least 1 byte, if !NULL) */ |
||
119 | int _lbfsize; /* 0 or -_bf._size, for inline putc */ |
||
120 | |||
121 | /* operations */
|
||
122 | void *_cookie; /* cookie passed to io functions */ |
||
123 | int (*_close)(void *); |
||
124 | ssize_t (*_read) (void *, void *, size_t); |
||
125 | __off_t (*_seek) (void *, __off_t, int); |
||
126 | ssize_t (*_write)(void *, const void *, size_t); |
||
127 | |||
128 | /* file extension */
|
||
129 | struct __sbuf _ext;
|
||
130 | |||
131 | /* separate buffer for long sequences of ungetc() */
|
||
132 | unsigned char *_up; /* saved _p when _p is doing ungetc data */ |
||
133 | int _ur; /* saved _r when _r is counting ungetc data */ |
||
134 | |||
135 | /* tricks to meet minimum requirements even when malloc() fails */
|
||
136 | unsigned char _ubuf[3]; /* guarantee an ungetc() buffer */ |
||
137 | unsigned char _nbuf[1]; /* guarantee a getc() buffer */ |
||
138 | |||
139 | int (*_flush)(void *); |
||
140 | /* Formerly used by fgetln/fgetwln; kept for binary compatibility */
|
||
141 | char _lb_unused[sizeof(struct __sbuf) - sizeof(int (*)(void *))]; |
||
142 | |||
143 | /* Unix stdio files get aligned to block boundaries on fseek() */
|
||
144 | int _blksize; /* stat.st_blksize (may be != _bf._size) */ |
||
145 | __off_t _offset; /* current lseek offset */
|
||
146 | } FILE; |
||
147 | |||
148 | __BEGIN_DECLS |
||
149 | extern FILE __sF[3]; |
||
150 | __END_DECLS |
||
151 | |||
152 | #define __SLBF 0x0001 /* line buffered */ |
||
153 | #define __SNBF 0x0002 /* unbuffered */ |
||
154 | #define __SRD 0x0004 /* OK to read */ |
||
155 | #define __SWR 0x0008 /* OK to write */ |
||
156 | /* RD and WR are never simultaneously asserted */
|
||
157 | #define __SRW 0x0010 /* open for reading & writing */ |
||
158 | #define __SEOF 0x0020 /* found EOF */ |
||
159 | #define __SERR 0x0040 /* found error */ |
||
160 | #define __SMBF 0x0080 /* _buf is from malloc */ |
||
161 | #define __SAPP 0x0100 /* fdopen()ed in append mode */ |
||
162 | #define __SSTR 0x0200 /* this is an sprintf/snprintf string */ |
||
163 | #define __SOPT 0x0400 /* do fseek() optimization */ |
||
164 | #define __SNPT 0x0800 /* do not do fseek() optimization */ |
||
165 | #define __SOFF 0x1000 /* set iff _offset is in fact correct */ |
||
166 | #define __SMOD 0x2000 /* true => fgetln modified _p text */ |
||
167 | #define __SALC 0x4000 /* allocate string space dynamically */ |
||
168 | |||
169 | /*
|
||
170 | * The following three definitions are for ANSI C, which took them
|
||
171 | * from System V, which brilliantly took internal interface macros and
|
||
172 | * made them official arguments to setvbuf(), without renaming them.
|
||
173 | * Hence, these ugly _IOxxx names are *supposed* to appear in user code.
|
||
174 | *
|
||
175 | * Although numbered as their counterparts above, the implementation
|
||
176 | * does not rely on this.
|
||
177 | */
|
||
178 | #define _IOFBF 0 /* setvbuf should set fully buffered */ |
||
179 | #define _IOLBF 1 /* setvbuf should set line buffered */ |
||
180 | #define _IONBF 2 /* setvbuf should set unbuffered */ |
||
181 | |||
182 | #define BUFSIZ 1024 /* size of buffer used by setbuf */ |
||
183 | #define EOF (-1) |
||
184 | |||
185 | /*
|
||
186 | * FOPEN_MAX is a minimum maximum, and is the number of streams that
|
||
187 | * stdio can provide without attempting to allocate further resources
|
||
188 | * (which could fail). Do not use this for anything.
|
||
189 | */
|
||
190 | /* must be == _POSIX_STREAM_MAX <limits.h> */
|
||
191 | #define FOPEN_MAX 20 /* must be <= OPEN_MAX <sys/syslimits.h> */ |
||
192 | #define FILENAME_MAX 1024 /* must be <= PATH_MAX <sys/syslimits.h> */ |
||
193 | |||
194 | /* System V/ANSI C; this is the wrong way to do this, do *not* use these. */
|
||
195 | #if defined(_XOPEN_SOURCE) || defined(_NETBSD_SOURCE)
|
||
196 | #define P_tmpdir "/var/tmp/" |
||
197 | #endif
|
||
198 | #define L_tmpnam 1024 /* XXX must be == PATH_MAX */ |
||
199 | /* Always ensure that this is consistent with <limits.h> */
|
||
200 | #ifndef TMP_MAX
|
||
201 | #define TMP_MAX 308915776 /* Legacy */ |
||
202 | #endif
|
||
203 | |||
204 | /* Always ensure that these are consistent with <fcntl.h> and <unistd.h>! */
|
||
205 | #ifndef SEEK_SET
|
||
206 | #define SEEK_SET 0 /* set file offset to offset */ |
||
207 | #endif
|
||
208 | #ifndef SEEK_CUR
|
||
209 | #define SEEK_CUR 1 /* set file offset to current plus offset */ |
||
210 | #endif
|
||
211 | #ifndef SEEK_END
|
||
212 | #define SEEK_END 2 /* set file offset to EOF plus offset */ |
||
213 | #endif
|
||
214 | |||
215 | #define stdin (&__sF[0]) |
||
216 | #define stdout (&__sF[1]) |
||
217 | #define stderr (&__sF[2]) |
||
218 | |||
219 | /*
|
||
220 | * Functions defined in ANSI C standard.
|
||
221 | */
|
||
222 | __BEGIN_DECLS |
||
223 | void clearerr(FILE *);
|
||
224 | int fclose(FILE *);
|
||
225 | int feof(FILE *);
|
||
226 | int ferror(FILE *);
|
||
227 | int fflush(FILE *);
|
||
228 | int fgetc(FILE *);
|
||
229 | char *fgets(char * __restrict, int, FILE * __restrict); |
||
230 | FILE *fopen(const char * __restrict , const char * __restrict); |
||
231 | int fprintf(FILE * __restrict, const char * __restrict, ...) |
||
232 | __printflike(2, 3); |
||
233 | int fputc(int, FILE *); |
||
234 | int fputs(const char * __restrict, FILE * __restrict); |
||
235 | size_t fread(void * __restrict, size_t, size_t, FILE * __restrict);
|
||
236 | FILE *freopen(const char * __restrict, const char * __restrict, |
||
237 | FILE * __restrict); |
||
238 | int fscanf(FILE * __restrict, const char * __restrict, ...) |
||
239 | __scanflike(2, 3); |
||
240 | int fseek(FILE *, long, int); |
||
241 | long ftell(FILE *);
|
||
242 | size_t fwrite(const void * __restrict, size_t, size_t, FILE * __restrict); |
||
243 | int getc(FILE *);
|
||
244 | int getchar(void); |
||
245 | void perror(const char *); |
||
246 | int printf(const char * __restrict, ...) |
||
247 | __printflike(1, 2); |
||
248 | int putc(int, FILE *); |
||
249 | int putchar(int); |
||
250 | int puts(const char *); |
||
251 | int remove(const char *); |
||
252 | void rewind(FILE *);
|
||
253 | int scanf(const char * __restrict, ...) |
||
254 | __scanflike(1, 2); |
||
255 | void setbuf(FILE * __restrict, char * __restrict); |
||
256 | int setvbuf(FILE * __restrict, char * __restrict, int, size_t); |
||
257 | int sscanf(const char * __restrict, const char * __restrict, ...) |
||
258 | __scanflike(2, 3); |
||
259 | FILE *tmpfile(void);
|
||
260 | int ungetc(int, FILE *); |
||
261 | int vfprintf(FILE * __restrict, const char * __restrict, __va_list) |
||
262 | __printflike(2, 0); |
||
263 | int vprintf(const char * __restrict, __va_list) |
||
264 | __printflike(1, 0); |
||
265 | |||
266 | #ifndef __AUDIT__
|
||
267 | char *gets(char *); |
||
268 | int sprintf(char * __restrict, const char * __restrict, ...) |
||
269 | __printflike(2, 3); |
||
270 | char *tmpnam(char *); |
||
271 | int vsprintf(char * __restrict, const char * __restrict, |
||
272 | __va_list) |
||
273 | __printflike(2, 0); |
||
274 | #endif
|
||
275 | |||
276 | #if defined(_POSIX_C_SOURCE) || defined(_XOPEN_SOURCE)
|
||
277 | int rename (const char *, const char *) __RENAME(__posix_rename); |
||
278 | #else
|
||
279 | int rename (const char *, const char *); |
||
280 | #endif
|
||
281 | __END_DECLS |
||
282 | |||
283 | #ifndef __LIBC12_SOURCE__
|
||
284 | int fgetpos(FILE * __restrict, fpos_t * __restrict) __RENAME(__fgetpos50);
|
||
285 | int fsetpos(FILE *, const fpos_t *) __RENAME(__fsetpos50); |
||
286 | #endif
|
||
287 | /*
|
||
288 | * IEEE Std 1003.1-90
|
||
289 | */
|
||
290 | #if defined(_POSIX_C_SOURCE) || defined(_XOPEN_SOURCE) || \
|
||
291 | defined(_NETBSD_SOURCE) |
||
292 | #define L_ctermid 1024 /* size for ctermid(); PATH_MAX */ |
||
293 | #define L_cuserid 9 /* size for cuserid(); UT_NAMESIZE + 1 */ |
||
294 | |||
295 | __BEGIN_DECLS |
||
296 | char *ctermid(char *); |
||
297 | #ifndef __CUSERID_DECLARED
|
||
298 | #define __CUSERID_DECLARED
|
||
299 | /* also declared in unistd.h */
|
||
300 | char *cuserid(char *); |
||
301 | #endif /* __CUSERID_DECLARED */ |
||
302 | FILE *fdopen(int, const char *); |
||
303 | int fileno(FILE *);
|
||
304 | __END_DECLS |
||
305 | #endif /* not ANSI */ |
||
306 | |||
307 | /*
|
||
308 | * IEEE Std 1003.1c-95, also adopted by X/Open CAE Spec Issue 5 Version 2
|
||
309 | */
|
||
310 | #if (_POSIX_C_SOURCE - 0) >= 199506L || (_XOPEN_SOURCE - 0) >= 500 || \ |
||
311 | defined(_REENTRANT) || defined(_NETBSD_SOURCE) |
||
312 | __BEGIN_DECLS |
||
313 | void flockfile(FILE *);
|
||
314 | int ftrylockfile(FILE *);
|
||
315 | void funlockfile(FILE *);
|
||
316 | int getc_unlocked(FILE *);
|
||
317 | int getchar_unlocked(void); |
||
318 | int putc_unlocked(int, FILE *); |
||
319 | int putchar_unlocked(int); |
||
320 | __END_DECLS |
||
321 | #endif /* _POSIX_C_SOURCE >= 1995056 || _XOPEN_SOURCE >= 500 || ... */ |
||
322 | |||
323 | /*
|
||
324 | * Functions defined in POSIX 1003.2 and XPG2 or later.
|
||
325 | */
|
||
326 | #if (_POSIX_C_SOURCE - 0) >= 2 || (_XOPEN_SOURCE - 0) >= 2 || \ |
||
327 | defined(_NETBSD_SOURCE) |
||
328 | __BEGIN_DECLS |
||
329 | int pclose(FILE *);
|
||
330 | FILE *popen(const char *, const char *); |
||
331 | __END_DECLS |
||
332 | #endif
|
||
333 | #ifdef _NETBSD_SOURCE
|
||
334 | __BEGIN_DECLS |
||
335 | FILE *popenve(const char *, char *const *, char *const *, const char *); |
||
336 | __END_DECLS |
||
337 | #endif
|
||
338 | |||
339 | /*
|
||
340 | * Functions defined in ISO XPG4.2, ISO C99, POSIX 1003.1-2001 or later.
|
||
341 | */
|
||
342 | #if ((__STDC_VERSION__ - 0) >= 199901L) || \ |
||
343 | ((_POSIX_C_SOURCE - 0) >= 200112L) || \ |
||
344 | (defined(_XOPEN_SOURCE) && defined(_XOPEN_SOURCE_EXTENDED)) || \ |
||
345 | ((_XOPEN_SOURCE - 0) >= 500) || \ |
||
346 | defined(_ISOC99_SOURCE) || defined(_NETBSD_SOURCE) |
||
347 | __BEGIN_DECLS |
||
348 | int snprintf(char * __restrict, size_t, const char * __restrict, ...) |
||
349 | __printflike(3, 4); |
||
350 | int vsnprintf(char * __restrict, size_t, const char * __restrict, |
||
351 | __va_list) |
||
352 | __printflike(3, 0); |
||
353 | __END_DECLS |
||
354 | #endif
|
||
355 | |||
356 | /*
|
||
357 | * Functions defined in XPG4.2.
|
||
358 | */
|
||
359 | #if defined(_XOPEN_SOURCE) || defined(_NETBSD_SOURCE)
|
||
360 | __BEGIN_DECLS |
||
361 | int getw(FILE *);
|
||
362 | int putw(int, FILE *); |
||
363 | |||
364 | #ifndef __AUDIT__
|
||
365 | char *tempnam(const char *, const char *); |
||
366 | #endif
|
||
367 | __END_DECLS |
||
368 | #endif
|
||
369 | |||
370 | /*
|
||
371 | * X/Open CAE Specification Issue 5 Version 2
|
||
372 | */
|
||
373 | #if (_POSIX_C_SOURCE - 0) >= 200112L || (_XOPEN_SOURCE - 0) >= 500 || \ |
||
374 | defined(_NETBSD_SOURCE) |
||
375 | #ifndef off_t
|
||
376 | typedef __off_t off_t;
|
||
377 | #define off_t __off_t
|
||
378 | #endif /* off_t */ |
||
379 | |||
380 | __BEGIN_DECLS |
||
381 | int fseeko(FILE *, off_t, int); |
||
382 | off_t ftello(FILE *); |
||
383 | __END_DECLS |
||
384 | #endif /* (_POSIX_C_SOURCE - 0) >= 200112L || _XOPEN_SOURCE >= 500 || ... */ |
||
385 | |||
386 | /*
|
||
387 | * Functions defined in ISO C99. Still put under _NETBSD_SOURCE due to
|
||
388 | * backward compatible.
|
||
389 | */
|
||
390 | #if defined(_ISOC99_SOURCE) || defined(_NETBSD_SOURCE)
|
||
391 | __BEGIN_DECLS |
||
392 | int vscanf(const char * __restrict, __va_list) |
||
393 | __scanflike(1, 0); |
||
394 | int vfscanf(FILE * __restrict, const char * __restrict, __va_list) |
||
395 | __scanflike(2, 0); |
||
396 | int vsscanf(const char * __restrict, const char * __restrict, |
||
397 | __va_list) |
||
398 | __scanflike(2, 0); |
||
399 | __END_DECLS |
||
400 | #endif /* _ISOC99_SOURCE || _NETBSD_SOURCE */ |
||
401 | |||
402 | /*
|
||
403 | * Routines that are purely local.
|
||
404 | */
|
||
405 | #if defined(_NETBSD_SOURCE)
|
||
406 | |||
407 | #define FPARSELN_UNESCESC 0x01 |
||
408 | #define FPARSELN_UNESCCONT 0x02 |
||
409 | #define FPARSELN_UNESCCOMM 0x04 |
||
410 | #define FPARSELN_UNESCREST 0x08 |
||
411 | #define FPARSELN_UNESCALL 0x0f |
||
412 | |||
413 | __BEGIN_DECLS |
||
414 | int asprintf(char ** __restrict, const char * __restrict, ...) |
||
415 | __printflike(2, 3); |
||
416 | char *fgetln(FILE * __restrict, size_t * __restrict);
|
||
417 | char *fparseln(FILE *, size_t *, size_t *, const char[3], int); |
||
418 | int fpurge(FILE *);
|
||
419 | void setbuffer(FILE *, char *, int); |
||
420 | int setlinebuf(FILE *);
|
||
421 | int vasprintf(char ** __restrict, const char * __restrict, |
||
422 | __va_list) |
||
423 | __printflike(2, 0); |
||
424 | const char *fmtcheck(const char *, const char *) |
||
425 | __format_arg(2);
|
||
426 | __END_DECLS |
||
427 | |||
428 | /*
|
||
429 | * Stdio function-access interface.
|
||
430 | */
|
||
431 | __BEGIN_DECLS |
||
432 | FILE *funopen(const void *, |
||
433 | int (*)(void *, char *, int), |
||
434 | int (*)(void *, const char *, int), |
||
435 | off_t (*)(void *, off_t, int), |
||
436 | int (*)(void *)); |
||
437 | FILE *funopen2(const void *, |
||
438 | ssize_t (*)(void *, void *, size_t), |
||
439 | ssize_t (*)(void *, const void *, size_t), |
||
440 | off_t (*)(void *, off_t, int), |
||
441 | int (*)(void *), |
||
442 | int (*)(void *)); |
||
443 | __END_DECLS |
||
444 | #define fropen(cookie, fn) funopen(cookie, fn, 0, 0, 0) |
||
445 | #define fwopen(cookie, fn) funopen(cookie, 0, fn, 0, 0) |
||
446 | #define fropen2(cookie, fn) funopen2(cookie, fn, 0, 0, 0, 0) |
||
447 | #define fwopen2(cookie, fn) funopen2(cookie, 0, fn, 0, 0, 0) |
||
448 | #endif /* _NETBSD_SOURCE */ |
||
449 | |||
450 | /*
|
||
451 | * Functions internal to the implementation.
|
||
452 | */
|
||
453 | __BEGIN_DECLS |
||
454 | int __srget(FILE *);
|
||
455 | int __swbuf(int, FILE *); |
||
456 | __END_DECLS |
||
457 | |||
458 | /*
|
||
459 | * The __sfoo macros are here so that we can
|
||
460 | * define function versions in the C library.
|
||
461 | */
|
||
462 | #define __sgetc(p) (--(p)->_r < 0 ? __srget(p) : (int)(*(p)->_p++)) |
||
463 | #if defined(__GNUC__) && defined(__STDC__)
|
||
464 | static __inline int __sputc(int _c, FILE *_p) { |
||
465 | if (--_p->_w >= 0 || (_p->_w >= _p->_lbfsize && (char)_c != '\n')) |
||
466 | return *_p->_p++ = (unsigned char)_c; |
||
467 | else
|
||
468 | return __swbuf(_c, _p);
|
||
469 | } |
||
470 | #else
|
||
471 | /*
|
||
472 | * This has been tuned to generate reasonable code on the vax using pcc.
|
||
473 | */
|
||
474 | #define __sputc(c, p) \
|
||
475 | (--(p)->_w < 0 ? \
|
||
476 | (p)->_w >= (p)->_lbfsize ? \ |
||
477 | (*(p)->_p = (c)), *(p)->_p != '\n' ? \
|
||
478 | (int)*(p)->_p++ : \
|
||
479 | __swbuf('\n', p) : \
|
||
480 | __swbuf((int)(c), p) : \
|
||
481 | (*(p)->_p = (c), (int)*(p)->_p++))
|
||
482 | #endif
|
||
483 | |||
484 | #define __sfeof(p) (((p)->_flags & __SEOF) != 0) |
||
485 | #define __sferror(p) (((p)->_flags & __SERR) != 0) |
||
486 | #define __sclearerr(p) ((void)((p)->_flags &= ~(__SERR|__SEOF))) |
||
487 | #define __sfileno(p) \
|
||
488 | ((p)->_file == -1 ? -1 : (int)(unsigned short)(p)->_file) |
||
489 | |||
490 | #if !defined(__lint__) && !defined(__cplusplus)
|
||
491 | #if !defined(_REENTRANT) && !defined(_PTHREADS)
|
||
492 | #define feof(p) __sfeof(p)
|
||
493 | #define ferror(p) __sferror(p)
|
||
494 | #define clearerr(p) __sclearerr(p)
|
||
495 | |||
496 | #define getc(fp) __sgetc(fp)
|
||
497 | #define putc(x, fp) __sputc(x, fp)
|
||
498 | #endif /* !_REENTRANT && !_PTHREADS */ |
||
499 | |||
500 | #define getchar() getc(stdin)
|
||
501 | #define putchar(x) putc(x, stdout)
|
||
502 | |||
503 | #endif /* !__lint__ && !__cplusplus */ |
||
504 | |||
505 | #if (defined(_POSIX_C_SOURCE) || defined(_XOPEN_SOURCE) || \
|
||
506 | defined(_NETBSD_SOURCE)) && !defined(__cplusplus) |
||
507 | #if !defined(_REENTRANT) && !defined(_PTHREADS)
|
||
508 | #define fileno(p) __sfileno(p)
|
||
509 | #endif /* !_REENTRANT && !_PTHREADS */ |
||
510 | #endif /* !_ANSI_SOURCE && !__cplusplus*/ |
||
511 | |||
512 | #if (_POSIX_C_SOURCE - 0) >= 200809L || defined(_NETBSD_SOURCE) |
||
513 | __BEGIN_DECLS |
||
514 | int vdprintf(int, const char * __restrict, __va_list) |
||
515 | __printflike(2, 0); |
||
516 | int dprintf(int, const char * __restrict, ...) |
||
517 | __printflike(2, 3); |
||
518 | __END_DECLS |
||
519 | #endif /* (_POSIX_C_SOURCE - 0) >= 200809L || defined(_NETBSD_SOURCE) */ |
||
520 | |||
521 | #if (_POSIX_C_SOURCE - 0) >= 199506L || (_XOPEN_SOURCE - 0) >= 500 || \ |
||
522 | defined(_REENTRANT) || defined(_NETBSD_SOURCE) && !defined(__cplusplus) |
||
523 | #define getc_unlocked(fp) __sgetc(fp)
|
||
524 | #define putc_unlocked(x, fp) __sputc(x, fp)
|
||
525 | |||
526 | #define getchar_unlocked() getc_unlocked(stdin)
|
||
527 | #define putchar_unlocked(x) putc_unlocked(x, stdout)
|
||
528 | #endif /* _POSIX_C_SOURCE >= 199506 || _XOPEN_SOURCE >= 500 || _REENTRANT... */ |
||
529 | |||
530 | #if (_POSIX_C_SOURCE - 0) >= 200809L || (_XOPEN_SOURCE - 0) >= 700 || \ |
||
531 | defined(_NETBSD_SOURCE) |
||
532 | __BEGIN_DECLS |
||
533 | FILE *fmemopen(void * __restrict, size_t, const char * __restrict); |
||
534 | FILE *open_memstream(char **, size_t *);
|
||
535 | ssize_t getdelim(char ** __restrict, size_t * __restrict, int, |
||
536 | FILE * __restrict); |
||
537 | ssize_t getline(char ** __restrict, size_t * __restrict, FILE * __restrict);
|
||
538 | __END_DECLS |
||
539 | #endif
|
||
540 | |||
541 | #if (_POSIX_C_SOURCE - 0) >= 200809L || defined(_NETBSD_SOURCE) |
||
542 | # ifndef __LOCALE_T_DECLARED
|
||
543 | typedef struct _locale *locale_t; |
||
544 | # define __LOCALE_T_DECLARED
|
||
545 | # endif
|
||
546 | __BEGIN_DECLS |
||
547 | int fprintf_l(FILE * __restrict, locale_t, const char * __restrict, ...) |
||
548 | __printflike(3, 4); |
||
549 | int vfprintf_l(FILE * __restrict, locale_t, const char * __restrict, |
||
550 | __va_list) __printflike(3, 0); |
||
551 | int printf_l(locale_t, const char * __restrict, ...) |
||
552 | __printflike(2, 3); |
||
553 | int vprintf_l(locale_t, const char * __restrict, __va_list) |
||
554 | __printflike(2, 0); |
||
555 | int asprintf_l(char ** __restrict, locale_t, const char * __restrict, ...) |
||
556 | __printflike(3, 4); |
||
557 | int vasprintf_l(char ** __restrict, locale_t, const char * __restrict, |
||
558 | __va_list) |
||
559 | __printflike(3, 0); |
||
560 | int vdprintf_l(int, locale_t, const char * __restrict, __va_list) |
||
561 | __printflike(3, 0); |
||
562 | int dprintf_l(int, locale_t, const char * __restrict, ...) |
||
563 | __printflike(3, 4); |
||
564 | int snprintf_l(char * __restrict, size_t, locale_t, |
||
565 | const char * __restrict, ...) __printflike(4, 5); |
||
566 | int vsnprintf_l(char * __restrict, size_t, locale_t, |
||
567 | const char * __restrict, __va_list) __printflike(4, 0); |
||
568 | #ifndef __AUDIT__
|
||
569 | int sprintf_l(char * __restrict, locale_t, const char * __restrict, ...) |
||
570 | __printflike(3, 4); |
||
571 | int vsprintf_l(char * __restrict, locale_t, const char * __restrict, |
||
572 | __va_list) __printflike(3, 0); |
||
573 | #endif
|
||
574 | |||
575 | int fscanf_l(FILE * __restrict, locale_t, const char * __restrict, ...) |
||
576 | __scanflike(3, 4); |
||
577 | int scanf_l(locale_t, const char * __restrict, ...) |
||
578 | __scanflike(2, 3); |
||
579 | int sscanf_l(const char * __restrict, locale_t, |
||
580 | const char * __restrict, ...) __scanflike(3, 4); |
||
581 | int vscanf_l(locale_t, const char * __restrict, __va_list) |
||
582 | __scanflike(2, 0); |
||
583 | int vfscanf_l(FILE * __restrict, locale_t, const char * __restrict, |
||
584 | __va_list) __scanflike(3, 0); |
||
585 | int vsscanf_l(const char * __restrict, locale_t, const char * __restrict, |
||
586 | __va_list) __scanflike(3, 0); |
||
587 | #ifdef _NETBSD_SOURCE
|
||
588 | int snprintf_ss(char *restrict, size_t, const char * __restrict, ...) |
||
589 | __printflike(3, 4); |
||
590 | int vsnprintf_ss(char *restrict, size_t, const char * __restrict, __va_list) |
||
591 | __printflike(3, 0); |
||
592 | #endif
|
||
593 | __END_DECLS |
||
594 | #endif
|
||
595 | |||
596 | #if _FORTIFY_SOURCE > 0 |
||
597 | #include <ssp/stdio.h> |
||
598 | #endif
|
||
599 | |||
600 | #endif /* _STDIO_H_ */ |