Add more __wur attributes.
[kopensolaris-gnu/glibc.git] / libio / stdio.h
1 /* Define ISO C stdio on top of C++ iostreams.
2    Copyright (C) 1991,1994-2004,2005,2006 Free Software Foundation, Inc.
3    This file is part of the GNU C Library.
4
5    The GNU C Library is free software; you can redistribute it and/or
6    modify it under the terms of the GNU Lesser General Public
7    License as published by the Free Software Foundation; either
8    version 2.1 of the License, or (at your option) any later version.
9
10    The GNU C Library is distributed in the hope that it will be useful,
11    but WITHOUT ANY WARRANTY; without even the implied warranty of
12    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
13    Lesser General Public License for more details.
14
15    You should have received a copy of the GNU Lesser General Public
16    License along with the GNU C Library; if not, write to the Free
17    Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
18    02111-1307 USA.  */
19
20 /*
21  *      ISO C99 Standard: 7.19 Input/output     <stdio.h>
22  */
23
24 #ifndef _STDIO_H
25
26 #if !defined __need_FILE && !defined __need___FILE
27 # define _STDIO_H       1
28 # include <features.h>
29
30 __BEGIN_DECLS
31
32 # define __need_size_t
33 # define __need_NULL
34 # include <stddef.h>
35
36 # include <bits/types.h>
37 # define __need_FILE
38 # define __need___FILE
39 #endif /* Don't need FILE.  */
40
41
42 #if !defined __FILE_defined && defined __need_FILE
43
44 __BEGIN_NAMESPACE_STD
45 /* The opaque type of streams.  This is the definition used elsewhere.  */
46 typedef struct _IO_FILE FILE;
47 __END_NAMESPACE_STD
48 #if defined __USE_LARGEFILE64 || defined __USE_SVID || defined __USE_POSIX \
49     || defined __USE_BSD || defined __USE_ISOC99 || defined __USE_XOPEN \
50     || defined __USE_POSIX2
51 __USING_NAMESPACE_STD(FILE)
52 #endif
53
54 # define __FILE_defined 1
55 #endif /* FILE not defined.  */
56 #undef  __need_FILE
57
58
59 #if !defined ____FILE_defined && defined __need___FILE
60
61 /* The opaque type of streams.  This is the definition used elsewhere.  */
62 typedef struct _IO_FILE __FILE;
63
64 # define ____FILE_defined       1
65 #endif /* __FILE not defined.  */
66 #undef  __need___FILE
67
68
69 #ifdef  _STDIO_H
70 #define _STDIO_USES_IOSTREAM
71
72 #include <libio.h>
73
74 #ifdef __USE_XOPEN
75 # ifdef __GNUC__
76 #  ifndef _VA_LIST_DEFINED
77 typedef _G_va_list va_list;
78 #   define _VA_LIST_DEFINED
79 #  endif
80 # else
81 #  include <stdarg.h>
82 # endif
83 #endif
84
85 /* The type of the second argument to `fgetpos' and `fsetpos'.  */
86 __BEGIN_NAMESPACE_STD
87 #ifndef __USE_FILE_OFFSET64
88 typedef _G_fpos_t fpos_t;
89 #else
90 typedef _G_fpos64_t fpos_t;
91 #endif
92 __END_NAMESPACE_STD
93 #ifdef __USE_LARGEFILE64
94 typedef _G_fpos64_t fpos64_t;
95 #endif
96
97 /* The possibilities for the third argument to `setvbuf'.  */
98 #define _IOFBF 0                /* Fully buffered.  */
99 #define _IOLBF 1                /* Line buffered.  */
100 #define _IONBF 2                /* No buffering.  */
101
102
103 /* Default buffer size.  */
104 #ifndef BUFSIZ
105 # define BUFSIZ _IO_BUFSIZ
106 #endif
107
108
109 /* End of file character.
110    Some things throughout the library rely on this being -1.  */
111 #ifndef EOF
112 # define EOF (-1)
113 #endif
114
115
116 /* The possibilities for the third argument to `fseek'.
117    These values should not be changed.  */
118 #define SEEK_SET        0       /* Seek from beginning of file.  */
119 #define SEEK_CUR        1       /* Seek from current position.  */
120 #define SEEK_END        2       /* Seek from end of file.  */
121
122
123 #if defined __USE_SVID || defined __USE_XOPEN
124 /* Default path prefix for `tempnam' and `tmpnam'.  */
125 # define P_tmpdir       "/tmp"
126 #endif
127
128
129 /* Get the values:
130    L_tmpnam     How long an array of chars must be to be passed to `tmpnam'.
131    TMP_MAX      The minimum number of unique filenames generated by tmpnam
132                 (and tempnam when it uses tmpnam's name space),
133                 or tempnam (the two are separate).
134    L_ctermid    How long an array to pass to `ctermid'.
135    L_cuserid    How long an array to pass to `cuserid'.
136    FOPEN_MAX    Minimum number of files that can be open at once.
137    FILENAME_MAX Maximum length of a filename.  */
138 #include <bits/stdio_lim.h>
139
140
141 /* Standard streams.  */
142 extern struct _IO_FILE *stdin;          /* Standard input stream.  */
143 extern struct _IO_FILE *stdout;         /* Standard output stream.  */
144 extern struct _IO_FILE *stderr;         /* Standard error output stream.  */
145 /* C89/C99 say they're macros.  Make them happy.  */
146 #define stdin stdin
147 #define stdout stdout
148 #define stderr stderr
149
150 __BEGIN_NAMESPACE_STD
151 /* Remove file FILENAME.  */
152 extern int remove (__const char *__filename) __THROW;
153 /* Rename file OLD to NEW.  */
154 extern int rename (__const char *__old, __const char *__new) __THROW;
155 __END_NAMESPACE_STD
156
157 #ifdef __USE_ATFILE
158 /* Rename file OLD relative to OLDFD to NEW relative to NEWFD.  */
159 extern int renameat (int __oldfd, __const char *__old, int __newfd,
160                      __const char *__new) __THROW;
161 #endif
162
163 __BEGIN_NAMESPACE_STD
164 /* Create a temporary file and open it read/write.
165
166    This function is a possible cancellation points and therefore not
167    marked with __THROW.  */
168 #ifndef __USE_FILE_OFFSET64
169 extern FILE *tmpfile (void) __wur;
170 #else
171 # ifdef __REDIRECT
172 extern FILE *__REDIRECT (tmpfile, (void), tmpfile64) __wur;
173 # else
174 #  define tmpfile tmpfile64
175 # endif
176 #endif
177
178 #ifdef __USE_LARGEFILE64
179 extern FILE *tmpfile64 (void) __wur;
180 #endif
181
182 /* Generate a temporary filename.  */
183 extern char *tmpnam (char *__s) __THROW __wur;
184 __END_NAMESPACE_STD
185
186 #ifdef __USE_MISC
187 /* This is the reentrant variant of `tmpnam'.  The only difference is
188    that it does not allow S to be NULL.  */
189 extern char *tmpnam_r (char *__s) __THROW __wur;
190 #endif
191
192
193 #if defined __USE_SVID || defined __USE_XOPEN
194 /* Generate a unique temporary filename using up to five characters of PFX
195    if it is not NULL.  The directory to put this file in is searched for
196    as follows: First the environment variable "TMPDIR" is checked.
197    If it contains the name of a writable directory, that directory is used.
198    If not and if DIR is not NULL, that value is checked.  If that fails,
199    P_tmpdir is tried and finally "/tmp".  The storage for the filename
200    is allocated by `malloc'.  */
201 extern char *tempnam (__const char *__dir, __const char *__pfx)
202      __THROW __attribute_malloc__ __wur;
203 #endif
204
205
206 __BEGIN_NAMESPACE_STD
207 /* Close STREAM.
208
209    This function is a possible cancellation point and therefore not
210    marked with __THROW.  */
211 extern int fclose (FILE *__stream);
212 /* Flush STREAM, or all streams if STREAM is NULL.
213
214    This function is a possible cancellation point and therefore not
215    marked with __THROW.  */
216 extern int fflush (FILE *__stream);
217 __END_NAMESPACE_STD
218
219 #ifdef __USE_MISC
220 /* Faster versions when locking is not required.
221
222    This function is not part of POSIX and therefore no official
223    cancellation point.  But due to similarity with an POSIX interface
224    or due to the implementation it is a cancellation point and
225    therefore not marked with __THROW.  */
226 extern int fflush_unlocked (FILE *__stream);
227 #endif
228
229 #ifdef __USE_GNU
230 /* Close all streams.
231
232    This function is not part of POSIX and therefore no official
233    cancellation point.  But due to similarity with an POSIX interface
234    or due to the implementation it is a cancellation point and
235    therefore not marked with __THROW.  */
236 extern int fcloseall (void);
237 #endif
238
239
240 __BEGIN_NAMESPACE_STD
241 #ifndef __USE_FILE_OFFSET64
242 /* Open a file and create a new stream for it.
243
244    This function is a possible cancellation point and therefore not
245    marked with __THROW.  */
246 extern FILE *fopen (__const char *__restrict __filename,
247                     __const char *__restrict __modes) __wur;
248 /* Open a file, replacing an existing stream with it.
249
250    This function is a possible cancellation point and therefore not
251    marked with __THROW.  */
252 extern FILE *freopen (__const char *__restrict __filename,
253                       __const char *__restrict __modes,
254                       FILE *__restrict __stream) __wur;
255 #else
256 # ifdef __REDIRECT
257 extern FILE *__REDIRECT (fopen, (__const char *__restrict __filename,
258                                  __const char *__restrict __modes), fopen64)
259   __wur;
260 extern FILE *__REDIRECT (freopen, (__const char *__restrict __filename,
261                                    __const char *__restrict __modes,
262                                    FILE *__restrict __stream), freopen64)
263   __wur;
264 # else
265 #  define fopen fopen64
266 #  define freopen freopen64
267 # endif
268 #endif
269 __END_NAMESPACE_STD
270 #ifdef __USE_LARGEFILE64
271 extern FILE *fopen64 (__const char *__restrict __filename,
272                       __const char *__restrict __modes) __wur;
273 extern FILE *freopen64 (__const char *__restrict __filename,
274                         __const char *__restrict __modes,
275                         FILE *__restrict __stream) __wur;
276 #endif
277
278 #ifdef  __USE_POSIX
279 /* Create a new stream that refers to an existing system file descriptor.  */
280 extern FILE *fdopen (int __fd, __const char *__modes) __THROW __wur;
281 #endif
282
283 #ifdef  __USE_GNU
284 /* Create a new stream that refers to the given magic cookie,
285    and uses the given functions for input and output.  */
286 extern FILE *fopencookie (void *__restrict __magic_cookie,
287                           __const char *__restrict __modes,
288                           _IO_cookie_io_functions_t __io_funcs) __THROW __wur;
289
290 /* Create a new stream that refers to a memory buffer.  */
291 extern FILE *fmemopen (void *__s, size_t __len, __const char *__modes)
292   __THROW __wur;
293
294 /* Open a stream that writes into a malloc'd buffer that is expanded as
295    necessary.  *BUFLOC and *SIZELOC are updated with the buffer's location
296    and the number of characters written on fflush or fclose.  */
297 extern FILE *open_memstream (char **__bufloc, size_t *__sizeloc) __THROW __wur;
298 #endif
299
300
301 __BEGIN_NAMESPACE_STD
302 /* If BUF is NULL, make STREAM unbuffered.
303    Else make it use buffer BUF, of size BUFSIZ.  */
304 extern void setbuf (FILE *__restrict __stream, char *__restrict __buf) __THROW;
305 /* Make STREAM use buffering mode MODE.
306    If BUF is not NULL, use N bytes of it for buffering;
307    else allocate an internal buffer N bytes long.  */
308 extern int setvbuf (FILE *__restrict __stream, char *__restrict __buf,
309                     int __modes, size_t __n) __THROW;
310 __END_NAMESPACE_STD
311
312 #ifdef  __USE_BSD
313 /* If BUF is NULL, make STREAM unbuffered.
314    Else make it use SIZE bytes of BUF for buffering.  */
315 extern void setbuffer (FILE *__restrict __stream, char *__restrict __buf,
316                        size_t __size) __THROW;
317
318 /* Make STREAM line-buffered.  */
319 extern void setlinebuf (FILE *__stream) __THROW;
320 #endif
321
322
323 __BEGIN_NAMESPACE_STD
324 /* Write formatted output to STREAM.
325
326    This function is a possible cancellation point and therefore not
327    marked with __THROW.  */
328 extern int fprintf (FILE *__restrict __stream,
329                     __const char *__restrict __format, ...);
330 /* Write formatted output to stdout.
331
332    This function is a possible cancellation point and therefore not
333    marked with __THROW.  */
334 extern int printf (__const char *__restrict __format, ...);
335 /* Write formatted output to S.  */
336 extern int sprintf (char *__restrict __s,
337                     __const char *__restrict __format, ...) __THROW;
338
339 /* Write formatted output to S from argument list ARG.
340
341    This function is a possible cancellation point and therefore not
342    marked with __THROW.  */
343 extern int vfprintf (FILE *__restrict __s, __const char *__restrict __format,
344                      _G_va_list __arg);
345 /* Write formatted output to stdout from argument list ARG.
346
347    This function is a possible cancellation point and therefore not
348    marked with __THROW.  */
349 extern int vprintf (__const char *__restrict __format, _G_va_list __arg);
350 /* Write formatted output to S from argument list ARG.  */
351 extern int vsprintf (char *__restrict __s, __const char *__restrict __format,
352                      _G_va_list __arg) __THROW;
353 __END_NAMESPACE_STD
354
355 #if defined __USE_BSD || defined __USE_ISOC99 || defined __USE_UNIX98
356 __BEGIN_NAMESPACE_C99
357 /* Maximum chars of output to write in MAXLEN.  */
358 extern int snprintf (char *__restrict __s, size_t __maxlen,
359                      __const char *__restrict __format, ...)
360      __THROW __attribute__ ((__format__ (__printf__, 3, 4)));
361
362 extern int vsnprintf (char *__restrict __s, size_t __maxlen,
363                       __const char *__restrict __format, _G_va_list __arg)
364      __THROW __attribute__ ((__format__ (__printf__, 3, 0)));
365 __END_NAMESPACE_C99
366 #endif
367
368 #ifdef __USE_GNU
369 /* Write formatted output to a string dynamically allocated with `malloc'.
370    Store the address of the string in *PTR.  */
371 extern int vasprintf (char **__restrict __ptr, __const char *__restrict __f,
372                       _G_va_list __arg)
373      __THROW __attribute__ ((__format__ (__printf__, 2, 0))) __wur;
374 extern int __asprintf (char **__restrict __ptr,
375                        __const char *__restrict __fmt, ...)
376      __THROW __attribute__ ((__format__ (__printf__, 2, 3))) __wur;
377 extern int asprintf (char **__restrict __ptr,
378                      __const char *__restrict __fmt, ...)
379      __THROW __attribute__ ((__format__ (__printf__, 2, 3))) __wur;
380
381 /* Write formatted output to a file descriptor.
382
383    These functions are not part of POSIX and therefore no official
384    cancellation point.  But due to similarity with an POSIX interface
385    or due to the implementation they are cancellation points and
386    therefore not marked with __THROW.  */
387 extern int vdprintf (int __fd, __const char *__restrict __fmt,
388                      _G_va_list __arg)
389      __attribute__ ((__format__ (__printf__, 2, 0)));
390 extern int dprintf (int __fd, __const char *__restrict __fmt, ...)
391      __attribute__ ((__format__ (__printf__, 2, 3)));
392 #endif
393
394
395 __BEGIN_NAMESPACE_STD
396 /* Read formatted input from STREAM.
397
398    This function is a possible cancellation point and therefore not
399    marked with __THROW.  */
400 extern int fscanf (FILE *__restrict __stream,
401                    __const char *__restrict __format, ...) __wur;
402 /* Read formatted input from stdin.
403
404    This function is a possible cancellation point and therefore not
405    marked with __THROW.  */
406 extern int scanf (__const char *__restrict __format, ...) __wur;
407 /* Read formatted input from S.  */
408 extern int sscanf (__const char *__restrict __s,
409                    __const char *__restrict __format, ...) __THROW;
410 __END_NAMESPACE_STD
411
412 #ifdef  __USE_ISOC99
413 __BEGIN_NAMESPACE_C99
414 /* Read formatted input from S into argument list ARG.
415
416    This function is a possible cancellation point and therefore not
417    marked with __THROW.  */
418 extern int vfscanf (FILE *__restrict __s, __const char *__restrict __format,
419                     _G_va_list __arg)
420      __attribute__ ((__format__ (__scanf__, 2, 0))) __wur;
421
422 /* Read formatted input from stdin into argument list ARG.
423
424    This function is a possible cancellation point and therefore not
425    marked with __THROW.  */
426 extern int vscanf (__const char *__restrict __format, _G_va_list __arg)
427      __attribute__ ((__format__ (__scanf__, 1, 0))) __wur;
428
429 /* Read formatted input from S into argument list ARG.  */
430 extern int vsscanf (__const char *__restrict __s,
431                     __const char *__restrict __format, _G_va_list __arg)
432      __THROW __attribute__ ((__format__ (__scanf__, 2, 0)));
433 __END_NAMESPACE_C99
434 #endif /* Use ISO C9x.  */
435
436
437 __BEGIN_NAMESPACE_STD
438 /* Read a character from STREAM.
439
440    These functions are possible cancellation points and therefore not
441    marked with __THROW.  */
442 extern int fgetc (FILE *__stream);
443 extern int getc (FILE *__stream);
444
445 /* Read a character from stdin.
446
447    This function is a possible cancellation point and therefore not
448    marked with __THROW.  */
449 extern int getchar (void);
450 __END_NAMESPACE_STD
451
452 /* The C standard explicitly says this is a macro, so we always do the
453    optimization for it.  */
454 #define getc(_fp) _IO_getc (_fp)
455
456 #if defined __USE_POSIX || defined __USE_MISC
457 /* These are defined in POSIX.1:1996.
458
459    These functions are possible cancellation points and therefore not
460    marked with __THROW.  */
461 extern int getc_unlocked (FILE *__stream);
462 extern int getchar_unlocked (void);
463 #endif /* Use POSIX or MISC.  */
464
465 #ifdef __USE_MISC
466 /* Faster version when locking is not necessary.
467
468    This function is not part of POSIX and therefore no official
469    cancellation point.  But due to similarity with an POSIX interface
470    or due to the implementation it is a cancellation point and
471    therefore not marked with __THROW.  */
472 extern int fgetc_unlocked (FILE *__stream);
473 #endif /* Use MISC.  */
474
475
476 __BEGIN_NAMESPACE_STD
477 /* Write a character to STREAM.
478
479    These functions are possible cancellation points and therefore not
480    marked with __THROW.
481
482    These functions is a possible cancellation point and therefore not
483    marked with __THROW.  */
484 extern int fputc (int __c, FILE *__stream);
485 extern int putc (int __c, FILE *__stream);
486
487 /* Write a character to stdout.
488
489    This function is a possible cancellation point and therefore not
490    marked with __THROW.  */
491 extern int putchar (int __c);
492 __END_NAMESPACE_STD
493
494 /* The C standard explicitly says this can be a macro,
495    so we always do the optimization for it.  */
496 #define putc(_ch, _fp) _IO_putc (_ch, _fp)
497
498 #ifdef __USE_MISC
499 /* Faster version when locking is not necessary.
500
501    This function is not part of POSIX and therefore no official
502    cancellation point.  But due to similarity with an POSIX interface
503    or due to the implementation it is a cancellation point and
504    therefore not marked with __THROW.  */
505 extern int fputc_unlocked (int __c, FILE *__stream);
506 #endif /* Use MISC.  */
507
508 #if defined __USE_POSIX || defined __USE_MISC
509 /* These are defined in POSIX.1:1996.
510
511    These functions are possible cancellation points and therefore not
512    marked with __THROW.  */
513 extern int putc_unlocked (int __c, FILE *__stream);
514 extern int putchar_unlocked (int __c);
515 #endif /* Use POSIX or MISC.  */
516
517
518 #if defined __USE_SVID || defined __USE_MISC \
519     || (defined __USE_XOPEN && !defined __USE_XOPEN2K)
520 /* Get a word (int) from STREAM.  */
521 extern int getw (FILE *__stream);
522
523 /* Write a word (int) to STREAM.  */
524 extern int putw (int __w, FILE *__stream);
525 #endif
526
527
528 __BEGIN_NAMESPACE_STD
529 /* Get a newline-terminated string of finite length from STREAM.
530
531    This function is a possible cancellation point and therefore not
532    marked with __THROW.  */
533 extern char *fgets (char *__restrict __s, int __n, FILE *__restrict __stream)
534      __wur;
535
536 /* Get a newline-terminated string from stdin, removing the newline.
537    DO NOT USE THIS FUNCTION!!  There is no limit on how much it will read.
538
539    This function is a possible cancellation point and therefore not
540    marked with __THROW.  */
541 extern char *gets (char *__s) __wur;
542 __END_NAMESPACE_STD
543
544 #ifdef __USE_GNU
545 /* This function does the same as `fgets' but does not lock the stream.
546
547    This function is not part of POSIX and therefore no official
548    cancellation point.  But due to similarity with an POSIX interface
549    or due to the implementation it is a cancellation point and
550    therefore not marked with __THROW.  */
551 extern char *fgets_unlocked (char *__restrict __s, int __n,
552                              FILE *__restrict __stream) __wur;
553 #endif
554
555
556 #ifdef  __USE_GNU
557 /* Read up to (and including) a DELIMITER from STREAM into *LINEPTR
558    (and null-terminate it). *LINEPTR is a pointer returned from malloc (or
559    NULL), pointing to *N characters of space.  It is realloc'd as
560    necessary.  Returns the number of characters read (not including the
561    null terminator), or -1 on error or EOF.
562
563    These functions are not part of POSIX and therefore no official
564    cancellation point.  But due to similarity with an POSIX interface
565    or due to the implementation they are cancellation points and
566    therefore not marked with __THROW.  */
567 extern _IO_ssize_t __getdelim (char **__restrict __lineptr,
568                                size_t *__restrict __n, int __delimiter,
569                                FILE *__restrict __stream) __wur;
570 extern _IO_ssize_t getdelim (char **__restrict __lineptr,
571                              size_t *__restrict __n, int __delimiter,
572                              FILE *__restrict __stream) __wur;
573
574 /* Like `getdelim', but reads up to a newline.
575
576    This function is not part of POSIX and therefore no official
577    cancellation point.  But due to similarity with an POSIX interface
578    or due to the implementation it is a cancellation point and
579    therefore not marked with __THROW.  */
580 extern _IO_ssize_t getline (char **__restrict __lineptr,
581                             size_t *__restrict __n,
582                             FILE *__restrict __stream) __wur;
583 #endif
584
585
586 __BEGIN_NAMESPACE_STD
587 /* Write a string to STREAM.
588
589    This function is a possible cancellation points and therefore not
590    marked with __THROW.  */
591 extern int fputs (__const char *__restrict __s, FILE *__restrict __stream);
592
593 /* Write a string, followed by a newline, to stdout.
594
595    This function is a possible cancellation points and therefore not
596    marked with __THROW.  */
597 extern int puts (__const char *__s);
598
599
600 /* Push a character back onto the input buffer of STREAM.
601
602    This function is a possible cancellation points and therefore not
603    marked with __THROW.  */
604 extern int ungetc (int __c, FILE *__stream);
605
606
607 /* Read chunks of generic data from STREAM.
608
609    This function is a possible cancellation points and therefore not
610    marked with __THROW.  */
611 extern size_t fread (void *__restrict __ptr, size_t __size,
612                      size_t __n, FILE *__restrict __stream) __wur;
613 /* Write chunks of generic data to STREAM.
614
615    This function is a possible cancellation points and therefore not
616    marked with __THROW.  */
617 extern size_t fwrite (__const void *__restrict __ptr, size_t __size,
618                       size_t __n, FILE *__restrict __s) __wur;
619 __END_NAMESPACE_STD
620
621 #ifdef __USE_GNU
622 /* This function does the same as `fputs' but does not lock the stream.
623
624    This function is not part of POSIX and therefore no official
625    cancellation point.  But due to similarity with an POSIX interface
626    or due to the implementation it is a cancellation point and
627    therefore not marked with __THROW.  */
628 extern int fputs_unlocked (__const char *__restrict __s,
629                            FILE *__restrict __stream);
630 #endif
631
632 #ifdef __USE_MISC
633 /* Faster versions when locking is not necessary.
634
635    These functions are not part of POSIX and therefore no official
636    cancellation point.  But due to similarity with an POSIX interface
637    or due to the implementation they are cancellation points and
638    therefore not marked with __THROW.  */
639 extern size_t fread_unlocked (void *__restrict __ptr, size_t __size,
640                               size_t __n, FILE *__restrict __stream) __wur;
641 extern size_t fwrite_unlocked (__const void *__restrict __ptr, size_t __size,
642                                size_t __n, FILE *__restrict __stream) __wur;
643 #endif
644
645
646 __BEGIN_NAMESPACE_STD
647 /* Seek to a certain position on STREAM.
648
649    This function is a possible cancellation point and therefore not
650    marked with __THROW.  */
651 extern int fseek (FILE *__stream, long int __off, int __whence);
652 /* Return the current position of STREAM.
653
654    This function is a possible cancellation point and therefore not
655    marked with __THROW.  */
656 extern long int ftell (FILE *__stream) __wur;
657 /* Rewind to the beginning of STREAM.
658
659    This function is a possible cancellation point and therefore not
660    marked with __THROW.  */
661 extern void rewind (FILE *__stream);
662 __END_NAMESPACE_STD
663
664 /* The Single Unix Specification, Version 2, specifies an alternative,
665    more adequate interface for the two functions above which deal with
666    file offset.  `long int' is not the right type.  These definitions
667    are originally defined in the Large File Support API.  */
668
669 #if defined __USE_LARGEFILE || defined __USE_XOPEN2K
670 # ifndef __USE_FILE_OFFSET64
671 /* Seek to a certain position on STREAM.
672
673    This function is a possible cancellation point and therefore not
674    marked with __THROW.  */
675 extern int fseeko (FILE *__stream, __off_t __off, int __whence);
676 /* Return the current position of STREAM.
677
678    This function is a possible cancellation point and therefore not
679    marked with __THROW.  */
680 extern __off_t ftello (FILE *__stream) __wur;
681 # else
682 #  ifdef __REDIRECT
683 extern int __REDIRECT (fseeko,
684                        (FILE *__stream, __off64_t __off, int __whence),
685                        fseeko64);
686 extern __off64_t __REDIRECT (ftello, (FILE *__stream), ftello64);
687 #  else
688 #   define fseeko fseeko64
689 #   define ftello ftello64
690 #  endif
691 # endif
692 #endif
693
694 __BEGIN_NAMESPACE_STD
695 #ifndef __USE_FILE_OFFSET64
696 /* Get STREAM's position.
697
698    This function is a possible cancellation point and therefore not
699    marked with __THROW.  */
700 extern int fgetpos (FILE *__restrict __stream, fpos_t *__restrict __pos);
701 /* Set STREAM's position.
702
703    This function is a possible cancellation point and therefore not
704    marked with __THROW.  */
705 extern int fsetpos (FILE *__stream, __const fpos_t *__pos);
706 #else
707 # ifdef __REDIRECT
708 extern int __REDIRECT (fgetpos, (FILE *__restrict __stream,
709                                  fpos_t *__restrict __pos), fgetpos64);
710 extern int __REDIRECT (fsetpos,
711                        (FILE *__stream, __const fpos_t *__pos), fsetpos64);
712 # else
713 #  define fgetpos fgetpos64
714 #  define fsetpos fsetpos64
715 # endif
716 #endif
717 __END_NAMESPACE_STD
718
719 #ifdef __USE_LARGEFILE64
720 extern int fseeko64 (FILE *__stream, __off64_t __off, int __whence);
721 extern __off64_t ftello64 (FILE *__stream) __wur;
722 extern int fgetpos64 (FILE *__restrict __stream, fpos64_t *__restrict __pos);
723 extern int fsetpos64 (FILE *__stream, __const fpos64_t *__pos);
724 #endif
725
726 __BEGIN_NAMESPACE_STD
727 /* Clear the error and EOF indicators for STREAM.  */
728 extern void clearerr (FILE *__stream) __THROW;
729 /* Return the EOF indicator for STREAM.  */
730 extern int feof (FILE *__stream) __THROW __wur;
731 /* Return the error indicator for STREAM.  */
732 extern int ferror (FILE *__stream) __THROW __wur;
733 __END_NAMESPACE_STD
734
735 #ifdef __USE_MISC
736 /* Faster versions when locking is not required.  */
737 extern void clearerr_unlocked (FILE *__stream) __THROW;
738 extern int feof_unlocked (FILE *__stream) __THROW __wur;
739 extern int ferror_unlocked (FILE *__stream) __THROW __wur;
740 #endif
741
742
743 __BEGIN_NAMESPACE_STD
744 /* Print a message describing the meaning of the value of errno.
745
746    This function is a possible cancellation point and therefore not
747    marked with __THROW.  */
748 extern void perror (__const char *__s);
749 __END_NAMESPACE_STD
750
751 /* Provide the declarations for `sys_errlist' and `sys_nerr' if they
752    are available on this system.  Even if available, these variables
753    should not be used directly.  The `strerror' function provides
754    all the necessary functionality.  */
755 #include <bits/sys_errlist.h>
756
757
758 #ifdef  __USE_POSIX
759 /* Return the system file descriptor for STREAM.  */
760 extern int fileno (FILE *__stream) __THROW __wur;
761 #endif /* Use POSIX.  */
762
763 #ifdef __USE_MISC
764 /* Faster version when locking is not required.  */
765 extern int fileno_unlocked (FILE *__stream) __THROW __wur;
766 #endif
767
768
769 #if (defined __USE_POSIX2 || defined __USE_SVID  || defined __USE_BSD || \
770      defined __USE_MISC)
771 /* Create a new stream connected to a pipe running the given command.
772
773    This function is a possible cancellation point and therefore not
774    marked with __THROW.  */
775 extern FILE *popen (__const char *__command, __const char *__modes) __wur;
776
777 /* Close a stream opened by popen and return the status of its child.
778
779    This function is a possible cancellation point and therefore not
780    marked with __THROW.  */
781 extern int pclose (FILE *__stream);
782 #endif
783
784
785 #ifdef  __USE_POSIX
786 /* Return the name of the controlling terminal.  */
787 extern char *ctermid (char *__s) __THROW;
788 #endif /* Use POSIX.  */
789
790
791 #ifdef __USE_XOPEN
792 /* Return the name of the current user.  */
793 extern char *cuserid (char *__s);
794 #endif /* Use X/Open, but not issue 6.  */
795
796
797 #ifdef  __USE_GNU
798 struct obstack;                 /* See <obstack.h>.  */
799
800 /* Write formatted output to an obstack.  */
801 extern int obstack_printf (struct obstack *__restrict __obstack,
802                            __const char *__restrict __format, ...)
803      __THROW __attribute__ ((__format__ (__printf__, 2, 3)));
804 extern int obstack_vprintf (struct obstack *__restrict __obstack,
805                             __const char *__restrict __format,
806                             _G_va_list __args)
807      __THROW __attribute__ ((__format__ (__printf__, 2, 0)));
808 #endif /* Use GNU.  */
809
810
811 #if defined __USE_POSIX || defined __USE_MISC
812 /* These are defined in POSIX.1:1996.  */
813
814 /* Acquire ownership of STREAM.  */
815 extern void flockfile (FILE *__stream) __THROW;
816
817 /* Try to acquire ownership of STREAM but do not block if it is not
818    possible.  */
819 extern int ftrylockfile (FILE *__stream) __THROW __wur;
820
821 /* Relinquish the ownership granted for STREAM.  */
822 extern void funlockfile (FILE *__stream) __THROW;
823 #endif /* POSIX || misc */
824
825 #if defined __USE_XOPEN && !defined __USE_XOPEN2K && !defined __USE_GNU
826 /* The X/Open standard requires some functions and variables to be
827    declared here which do not belong into this header.  But we have to
828    follow.  In GNU mode we don't do this nonsense.  */
829 # define __need_getopt
830 # include <getopt.h>
831 #endif  /* X/Open, but not issue 6 and not for GNU.  */
832
833 /* If we are compiling with optimizing read this file.  It contains
834    several optimizing inline functions and macros.  */
835 #ifdef __USE_EXTERN_INLINES
836 # include <bits/stdio.h>
837 #endif
838 #if __USE_FORTIFY_LEVEL > 0 && !defined __cplusplus
839 # include <bits/stdio2.h>
840 #endif
841 #ifdef __LDBL_COMPAT
842 # include <bits/stdio-ldbl.h>
843 #endif
844
845 __END_DECLS
846
847 #endif /* <stdio.h> included.  */
848
849 #endif /* !_STDIO_H */