Project

General

Profile

Statistics
| Revision:

root / lab4 / .minix-src / include / stdio.h @ 14

History | View | Annotate | Download (19.2 KB)

1
/*        $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_ */