1#ifndef _STDIO_H
2# if !defined _ISOMAC && defined _IO_MTSAFE_IO
3# include <stdio-lock.h>
4# endif
5# include <libio/stdio.h>
6# ifndef _ISOMAC
7# define _LIBC_STDIO_H 1
8# include <libio/libio.h>
9
10/* Now define the internal interfaces. */
11
12extern int __fcloseall (void) attribute_hidden;
13extern int __snprintf (char *__restrict __s, size_t __maxlen,
14 const char *__restrict __format, ...)
15 __attribute__ ((__format__ (__printf__, 3, 4)));
16# if __LONG_DOUBLE_USES_FLOAT128 == 0
17libc_hidden_proto (__snprintf)
18# endif
19extern int __vfscanf (FILE *__restrict __s,
20 const char *__restrict __format,
21 __gnuc_va_list __arg)
22 __attribute__ ((__format__ (__scanf__, 2, 0)));
23libc_hidden_proto (__vfscanf)
24extern int __vscanf (const char *__restrict __format,
25 __gnuc_va_list __arg)
26 __attribute__ ((__format__ (__scanf__, 1, 0)));
27extern __ssize_t __getline (char **__lineptr, size_t *__n,
28 FILE *__stream) attribute_hidden;
29extern int __vsscanf (const char *__restrict __s,
30 const char *__restrict __format,
31 __gnuc_va_list __arg)
32 __attribute__ ((__format__ (__scanf__, 2, 0)));
33
34extern int __sprintf_chk (char *, int, size_t, const char *, ...) __THROW;
35extern int __snprintf_chk (char *, size_t, int, size_t, const char *, ...)
36 __THROW;
37extern int __vsprintf_chk (char *, int, size_t, const char *,
38 __gnuc_va_list) __THROW;
39extern int __vsnprintf_chk (char *, size_t, int, size_t, const char *,
40 __gnuc_va_list) __THROW;
41extern int __printf_chk (int, const char *, ...);
42extern int __fprintf_chk (FILE *, int, const char *, ...);
43extern int __vprintf_chk (int, const char *, __gnuc_va_list);
44extern int __vfprintf_chk (FILE *, int, const char *, __gnuc_va_list);
45extern char *__fgets_unlocked_chk (char *buf, size_t size, int n, FILE *fp);
46extern char *__fgets_chk (char *buf, size_t size, int n, FILE *fp);
47extern int __asprintf_chk (char **, int, const char *, ...) __THROW;
48extern int __vasprintf_chk (char **, int, const char *, __gnuc_va_list) __THROW;
49extern int __dprintf_chk (int, int, const char *, ...);
50extern int __vdprintf_chk (int, int, const char *, __gnuc_va_list);
51extern int __obstack_printf_chk (struct obstack *, int, const char *, ...)
52 __THROW;
53extern int __obstack_vprintf_chk (struct obstack *, int, const char *,
54 __gnuc_va_list) __THROW;
55
56extern int __isoc99_fscanf (FILE *__restrict __stream,
57 const char *__restrict __format, ...) __wur;
58extern int __isoc99_scanf (const char *__restrict __format, ...) __wur;
59extern int __isoc99_sscanf (const char *__restrict __s,
60 const char *__restrict __format, ...) __THROW;
61extern int __isoc99_vfscanf (FILE *__restrict __s,
62 const char *__restrict __format,
63 __gnuc_va_list __arg) __wur;
64extern int __isoc99_vscanf (const char *__restrict __format,
65 __gnuc_va_list __arg) __wur;
66extern int __isoc99_vsscanf (const char *__restrict __s,
67 const char *__restrict __format,
68 __gnuc_va_list __arg) __THROW;
69libc_hidden_proto (__isoc99_sscanf)
70libc_hidden_proto (__isoc99_vsscanf)
71libc_hidden_proto (__isoc99_vfscanf)
72
73/* Internal uses of sscanf should call the C99-compliant version.
74 Unfortunately, symbol redirection is not transitive, so the
75 __REDIRECT in the public header does not link up with the above
76 libc_hidden_proto. Bridge the gap with a macro. */
77# if !__GLIBC_USE (DEPRECATED_SCANF) \
78 && __LONG_DOUBLE_USES_FLOAT128 == 0
79# undef sscanf
80# define sscanf __isoc99_sscanf
81# endif
82
83/* Prototypes for compatibility functions. */
84extern FILE *__new_tmpfile (void);
85extern FILE *__old_tmpfile (void);
86
87# define __need_size_t
88# include <stddef.h>
89
90# include <bits/types/wint_t.h>
91
92/* Generate a unique file name (and possibly open it). */
93extern int __path_search (char *__tmpl, size_t __tmpl_len,
94 const char *__dir, const char *__pfx,
95 int __try_tempdir) attribute_hidden;
96
97extern int __gen_tempname (char *__tmpl, int __suffixlen, int __flags,
98 int __kind) attribute_hidden;
99/* The __kind argument to __gen_tempname may be one of: */
100# define __GT_FILE 0 /* create a file */
101# define __GT_DIR 1 /* create a directory */
102# define __GT_NOCREATE 2 /* just find a name not currently in use */
103
104enum __libc_message_action
105{
106 do_message = 0, /* Print message. */
107 do_abort = 1 << 0, /* Abort. */
108};
109
110/* Print out MESSAGE (which should end with a newline) on the error output
111 and abort. */
112extern void __libc_fatal (const char *__message)
113 __attribute__ ((__noreturn__));
114extern void __libc_message (enum __libc_message_action action,
115 const char *__fnt, ...) attribute_hidden;
116extern void __fortify_fail (const char *msg) __attribute__ ((__noreturn__));
117libc_hidden_proto (__fortify_fail)
118
119/* Acquire ownership of STREAM. */
120extern void __flockfile (FILE *__stream) attribute_hidden;
121
122/* Relinquish the ownership granted for STREAM. */
123extern void __funlockfile (FILE *__stream) attribute_hidden;
124
125/* Try to acquire ownership of STREAM but do not block if it is not
126 possible. */
127extern int __ftrylockfile (FILE *__stream);
128
129extern int __getc_unlocked (FILE *__fp) attribute_hidden;
130extern wint_t __getwc_unlocked (FILE *__fp);
131
132extern int __fxprintf (FILE *__fp, const char *__fmt, ...)
133 __attribute__ ((__format__ (__printf__, 2, 3))) attribute_hidden;
134extern int __fxprintf_nocancel (FILE *__fp, const char *__fmt, ...)
135 __attribute__ ((__format__ (__printf__, 2, 3))) attribute_hidden;
136int __vfxprintf (FILE *__fp, const char *__fmt, __gnuc_va_list,
137 unsigned int)
138 attribute_hidden;
139
140/* Read the next line from FP into BUFFER, of LENGTH bytes. LINE will
141 include the line terminator and a NUL terminator. On success,
142 return the length of the line, including the line terminator, but
143 excluding the NUL termintor. On EOF, return zero and write a NUL
144 terminator. On error, return -1 and set errno. If the total byte
145 count (line and both terminators) exceeds LENGTH, return -1 and set
146 errno to ERANGE (but do not mark the stream as failed).
147
148 The behavior is undefined if FP is not seekable, or if the stream
149 is already in an error state. */
150ssize_t __libc_readline_unlocked (FILE *fp, char *buffer, size_t length);
151libc_hidden_proto (__libc_readline_unlocked);
152
153extern const char *const _sys_errlist_internal[] attribute_hidden;
154extern int _sys_nerr_internal attribute_hidden;
155
156#if __LONG_DOUBLE_USES_FLOAT128 == 0
157libc_hidden_proto (__asprintf)
158#endif
159# if IS_IN (libc)
160extern FILE *_IO_new_fopen (const char*, const char*);
161# define fopen(fname, mode) _IO_new_fopen (fname, mode)
162extern FILE *_IO_new_fdopen (int, const char*);
163# define fdopen(fd, mode) _IO_new_fdopen (fd, mode)
164extern int _IO_new_fclose (FILE*);
165# define fclose(fp) _IO_new_fclose (fp)
166extern int _IO_fputs (const char*, FILE*);
167libc_hidden_proto (_IO_fputs)
168/* The compiler may optimize calls to fprintf into calls to fputs.
169 Use libc_hidden_proto to ensure that those calls, not redirected by
170 the fputs macro, also do not go through the PLT. */
171libc_hidden_proto (fputs)
172# define fputs(str, fp) _IO_fputs (str, fp)
173extern int _IO_new_fsetpos (FILE *, const __fpos_t *);
174# define fsetpos(fp, posp) _IO_new_fsetpos (fp, posp)
175extern int _IO_new_fgetpos (FILE *, __fpos_t *);
176# define fgetpos(fp, posp) _IO_new_fgetpos (fp, posp)
177# endif
178
179extern __typeof (dprintf) __dprintf
180 __attribute__ ((__format__ (__printf__, 2, 3)));
181libc_hidden_proto (__dprintf)
182#if __LONG_DOUBLE_USES_FLOAT128 == 0
183libc_hidden_proto (dprintf)
184libc_hidden_proto (fprintf)
185libc_hidden_proto (vfprintf)
186libc_hidden_proto (sprintf)
187#endif
188libc_hidden_proto (fwrite)
189libc_hidden_proto (perror)
190libc_hidden_proto (remove)
191libc_hidden_proto (rewind)
192libc_hidden_proto (fileno)
193extern __typeof (fileno) __fileno;
194libc_hidden_proto (__fileno)
195libc_hidden_proto (fwrite)
196libc_hidden_proto (fseek)
197extern __typeof (ftello) __ftello;
198libc_hidden_proto (__ftello)
199extern __typeof (fseeko64) __fseeko64;
200libc_hidden_proto (__fseeko64)
201extern __typeof (ftello64) __ftello64;
202libc_hidden_proto (__ftello64)
203libc_hidden_proto (fflush)
204libc_hidden_proto (fflush_unlocked)
205extern __typeof (fflush_unlocked) __fflush_unlocked;
206libc_hidden_proto (__fflush_unlocked)
207extern __typeof (fread_unlocked) __fread_unlocked;
208libc_hidden_proto (__fread_unlocked)
209libc_hidden_proto (fwrite_unlocked)
210libc_hidden_proto (fgets_unlocked)
211extern __typeof (fgets_unlocked) __fgets_unlocked;
212libc_hidden_proto (__fgets_unlocked)
213libc_hidden_proto (fputs_unlocked)
214extern __typeof (fputs_unlocked) __fputs_unlocked;
215libc_hidden_proto (__fputs_unlocked)
216libc_hidden_proto (feof_unlocked)
217extern __typeof (feof_unlocked) __feof_unlocked attribute_hidden;
218libc_hidden_proto (ferror_unlocked)
219extern __typeof (ferror_unlocked) __ferror_unlocked attribute_hidden;
220libc_hidden_proto (getc_unlocked)
221libc_hidden_proto (fputc_unlocked)
222libc_hidden_proto (putc_unlocked)
223extern __typeof (putc_unlocked) __putc_unlocked attribute_hidden;
224libc_hidden_proto (fmemopen)
225/* The prototype needs repeating instead of using __typeof to use
226 __THROW in C++ tests. */
227extern FILE *__open_memstream (char **, size_t *) __THROW __wur;
228libc_hidden_proto (__open_memstream)
229libc_hidden_proto (__libc_fatal)
230rtld_hidden_proto (__libc_fatal)
231libc_hidden_proto (__vsprintf_chk)
232
233extern FILE * __fmemopen (void *buf, size_t len, const char *mode);
234libc_hidden_proto (__fmemopen)
235
236extern int __gen_tempfd (int flags);
237libc_hidden_proto (__gen_tempfd)
238
239# ifdef __USE_EXTERN_INLINES
240__extern_inline int
241__NTH (__feof_unlocked (FILE *__stream))
242{
243 return __feof_unlocked_body (__stream);
244}
245
246__extern_inline int
247__NTH (__ferror_unlocked (FILE *__stream))
248{
249 return __ferror_unlocked_body (__stream);
250}
251
252__extern_inline int
253__getc_unlocked (FILE *__fp)
254{
255 return __getc_unlocked_body (__fp);
256}
257
258__extern_inline int
259__putc_unlocked (int __c, FILE *__stream)
260{
261 return __putc_unlocked_body (__c, __stream);
262}
263# endif
264
265extern __typeof (renameat) __renameat;
266libc_hidden_proto (__renameat)
267extern __typeof (renameat2) __renameat2;
268libc_hidden_proto (__renameat2)
269
270# endif /* not _ISOMAC */
271#endif /* stdio.h */
272