xref: /aosp_15_r20/bionic/libc/include/stdio.h (revision 8d67ca893c1523eb926b9080dbe4e2ffd2a27ba1)
1*8d67ca89SAndroid Build Coastguard Worker /*	$OpenBSD: stdio.h,v 1.35 2006/01/13 18:10:09 miod Exp $	*/
2*8d67ca89SAndroid Build Coastguard Worker /*	$NetBSD: stdio.h,v 1.18 1996/04/25 18:29:21 jtc Exp $	*/
3*8d67ca89SAndroid Build Coastguard Worker 
4*8d67ca89SAndroid Build Coastguard Worker /*-
5*8d67ca89SAndroid Build Coastguard Worker  * Copyright (c) 1990 The Regents of the University of California.
6*8d67ca89SAndroid Build Coastguard Worker  * All rights reserved.
7*8d67ca89SAndroid Build Coastguard Worker  *
8*8d67ca89SAndroid Build Coastguard Worker  * This code is derived from software contributed to Berkeley by
9*8d67ca89SAndroid Build Coastguard Worker  * Chris Torek.
10*8d67ca89SAndroid Build Coastguard Worker  *
11*8d67ca89SAndroid Build Coastguard Worker  * Redistribution and use in source and binary forms, with or without
12*8d67ca89SAndroid Build Coastguard Worker  * modification, are permitted provided that the following conditions
13*8d67ca89SAndroid Build Coastguard Worker  * are met:
14*8d67ca89SAndroid Build Coastguard Worker  * 1. Redistributions of source code must retain the above copyright
15*8d67ca89SAndroid Build Coastguard Worker  *    notice, this list of conditions and the following disclaimer.
16*8d67ca89SAndroid Build Coastguard Worker  * 2. Redistributions in binary form must reproduce the above copyright
17*8d67ca89SAndroid Build Coastguard Worker  *    notice, this list of conditions and the following disclaimer in the
18*8d67ca89SAndroid Build Coastguard Worker  *    documentation and/or other materials provided with the distribution.
19*8d67ca89SAndroid Build Coastguard Worker  * 3. Neither the name of the University nor the names of its contributors
20*8d67ca89SAndroid Build Coastguard Worker  *    may be used to endorse or promote products derived from this software
21*8d67ca89SAndroid Build Coastguard Worker  *    without specific prior written permission.
22*8d67ca89SAndroid Build Coastguard Worker  *
23*8d67ca89SAndroid Build Coastguard Worker  * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
24*8d67ca89SAndroid Build Coastguard Worker  * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
25*8d67ca89SAndroid Build Coastguard Worker  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
26*8d67ca89SAndroid Build Coastguard Worker  * ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
27*8d67ca89SAndroid Build Coastguard Worker  * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
28*8d67ca89SAndroid Build Coastguard Worker  * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
29*8d67ca89SAndroid Build Coastguard Worker  * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
30*8d67ca89SAndroid Build Coastguard Worker  * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
31*8d67ca89SAndroid Build Coastguard Worker  * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
32*8d67ca89SAndroid Build Coastguard Worker  * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
33*8d67ca89SAndroid Build Coastguard Worker  * SUCH DAMAGE.
34*8d67ca89SAndroid Build Coastguard Worker  *
35*8d67ca89SAndroid Build Coastguard Worker  *	@(#)stdio.h	5.17 (Berkeley) 6/3/91
36*8d67ca89SAndroid Build Coastguard Worker  */
37*8d67ca89SAndroid Build Coastguard Worker 
38*8d67ca89SAndroid Build Coastguard Worker #ifndef	_STDIO_H_
39*8d67ca89SAndroid Build Coastguard Worker #define	_STDIO_H_
40*8d67ca89SAndroid Build Coastguard Worker 
41*8d67ca89SAndroid Build Coastguard Worker #include <sys/cdefs.h>
42*8d67ca89SAndroid Build Coastguard Worker #include <sys/types.h>
43*8d67ca89SAndroid Build Coastguard Worker 
44*8d67ca89SAndroid Build Coastguard Worker #include <stdarg.h>
45*8d67ca89SAndroid Build Coastguard Worker #include <stddef.h>
46*8d67ca89SAndroid Build Coastguard Worker 
47*8d67ca89SAndroid Build Coastguard Worker #include <bits/seek_constants.h>
48*8d67ca89SAndroid Build Coastguard Worker 
49*8d67ca89SAndroid Build Coastguard Worker #if __ANDROID_API__ < 24
50*8d67ca89SAndroid Build Coastguard Worker #include <bits/struct_file.h>
51*8d67ca89SAndroid Build Coastguard Worker #endif
52*8d67ca89SAndroid Build Coastguard Worker 
53*8d67ca89SAndroid Build Coastguard Worker __BEGIN_DECLS
54*8d67ca89SAndroid Build Coastguard Worker 
55*8d67ca89SAndroid Build Coastguard Worker typedef off_t fpos_t;
56*8d67ca89SAndroid Build Coastguard Worker typedef off64_t fpos64_t;
57*8d67ca89SAndroid Build Coastguard Worker 
58*8d67ca89SAndroid Build Coastguard Worker struct __sFILE;
59*8d67ca89SAndroid Build Coastguard Worker typedef struct __sFILE FILE;
60*8d67ca89SAndroid Build Coastguard Worker 
61*8d67ca89SAndroid Build Coastguard Worker #if __ANDROID_API__ >= 23
62*8d67ca89SAndroid Build Coastguard Worker extern FILE* _Nonnull stdin __INTRODUCED_IN(23);
63*8d67ca89SAndroid Build Coastguard Worker extern FILE* _Nonnull stdout __INTRODUCED_IN(23);
64*8d67ca89SAndroid Build Coastguard Worker extern FILE* _Nonnull stderr __INTRODUCED_IN(23);
65*8d67ca89SAndroid Build Coastguard Worker 
66*8d67ca89SAndroid Build Coastguard Worker /* C99 and earlier plus current C++ standards say these must be macros. */
67*8d67ca89SAndroid Build Coastguard Worker #define stdin stdin
68*8d67ca89SAndroid Build Coastguard Worker #define stdout stdout
69*8d67ca89SAndroid Build Coastguard Worker #define stderr stderr
70*8d67ca89SAndroid Build Coastguard Worker #else
71*8d67ca89SAndroid Build Coastguard Worker /* Before M the actual symbols for stdin and friends had different names. */
72*8d67ca89SAndroid Build Coastguard Worker extern FILE __sF[] __REMOVED_IN(23, "Use stdin/stdout/stderr");
73*8d67ca89SAndroid Build Coastguard Worker 
74*8d67ca89SAndroid Build Coastguard Worker #define stdin (&__sF[0])
75*8d67ca89SAndroid Build Coastguard Worker #define stdout (&__sF[1])
76*8d67ca89SAndroid Build Coastguard Worker #define stderr (&__sF[2])
77*8d67ca89SAndroid Build Coastguard Worker #endif
78*8d67ca89SAndroid Build Coastguard Worker 
79*8d67ca89SAndroid Build Coastguard Worker /*
80*8d67ca89SAndroid Build Coastguard Worker  * The following three definitions are for ANSI C, which took them
81*8d67ca89SAndroid Build Coastguard Worker  * from System V, which brilliantly took internal interface macros and
82*8d67ca89SAndroid Build Coastguard Worker  * made them official arguments to setvbuf(), without renaming them.
83*8d67ca89SAndroid Build Coastguard Worker  * Hence, these ugly _IOxxx names are *supposed* to appear in user code.
84*8d67ca89SAndroid Build Coastguard Worker  *
85*8d67ca89SAndroid Build Coastguard Worker  * Although numbered as their counterparts above, the implementation
86*8d67ca89SAndroid Build Coastguard Worker  * does not rely on this.
87*8d67ca89SAndroid Build Coastguard Worker  */
88*8d67ca89SAndroid Build Coastguard Worker #define	_IOFBF	0		/* setvbuf should set fully buffered */
89*8d67ca89SAndroid Build Coastguard Worker #define	_IOLBF	1		/* setvbuf should set line buffered */
90*8d67ca89SAndroid Build Coastguard Worker #define	_IONBF	2		/* setvbuf should set unbuffered */
91*8d67ca89SAndroid Build Coastguard Worker 
92*8d67ca89SAndroid Build Coastguard Worker #define	BUFSIZ	1024		/* size of buffer used by setbuf */
93*8d67ca89SAndroid Build Coastguard Worker #define	EOF	(-1)
94*8d67ca89SAndroid Build Coastguard Worker 
95*8d67ca89SAndroid Build Coastguard Worker /*
96*8d67ca89SAndroid Build Coastguard Worker  * FOPEN_MAX is a minimum maximum, and is the number of streams that
97*8d67ca89SAndroid Build Coastguard Worker  * stdio can provide without attempting to allocate further resources
98*8d67ca89SAndroid Build Coastguard Worker  * (which could fail).  Do not use this for anything.
99*8d67ca89SAndroid Build Coastguard Worker  */
100*8d67ca89SAndroid Build Coastguard Worker #define FOPEN_MAX 20
101*8d67ca89SAndroid Build Coastguard Worker #define FILENAME_MAX 4096
102*8d67ca89SAndroid Build Coastguard Worker 
103*8d67ca89SAndroid Build Coastguard Worker #define L_tmpnam 4096
104*8d67ca89SAndroid Build Coastguard Worker #define TMP_MAX 308915776
105*8d67ca89SAndroid Build Coastguard Worker 
106*8d67ca89SAndroid Build Coastguard Worker void clearerr(FILE* _Nonnull __fp);
107*8d67ca89SAndroid Build Coastguard Worker int fclose(FILE* _Nonnull __fp);
108*8d67ca89SAndroid Build Coastguard Worker __nodiscard int feof(FILE* _Nonnull __fp);
109*8d67ca89SAndroid Build Coastguard Worker __nodiscard int ferror(FILE* _Nonnull __fp);
110*8d67ca89SAndroid Build Coastguard Worker int fflush(FILE* _Nullable __fp);
111*8d67ca89SAndroid Build Coastguard Worker __nodiscard int fgetc(FILE* _Nonnull __fp);
112*8d67ca89SAndroid Build Coastguard Worker char* _Nullable fgets(char* _Nonnull __buf, int __size, FILE* _Nonnull __fp);
113*8d67ca89SAndroid Build Coastguard Worker int fprintf(FILE* _Nonnull __fp , const char* _Nonnull __fmt, ...) __printflike(2, 3);
114*8d67ca89SAndroid Build Coastguard Worker int fputc(int __ch, FILE* _Nonnull __fp);
115*8d67ca89SAndroid Build Coastguard Worker int fputs(const char* _Nonnull __s, FILE* _Nonnull __fp);
116*8d67ca89SAndroid Build Coastguard Worker size_t fread(void* _Nonnull __buf, size_t __size, size_t __count, FILE* _Nonnull __fp);
117*8d67ca89SAndroid Build Coastguard Worker int fscanf(FILE* _Nonnull __fp, const char* _Nonnull __fmt, ...) __scanflike(2, 3);
118*8d67ca89SAndroid Build Coastguard Worker size_t fwrite(const void* _Nonnull __buf, size_t __size, size_t __count, FILE* _Nonnull __fp);
119*8d67ca89SAndroid Build Coastguard Worker __nodiscard int getc(FILE* _Nonnull __fp);
120*8d67ca89SAndroid Build Coastguard Worker __nodiscard int getchar(void);
121*8d67ca89SAndroid Build Coastguard Worker ssize_t getdelim(char* _Nullable * _Nonnull __line_ptr, size_t* _Nonnull __line_length_ptr, int __delimiter, FILE* _Nonnull __fp);
122*8d67ca89SAndroid Build Coastguard Worker ssize_t getline(char* _Nullable * _Nonnull __line_ptr, size_t* _Nonnull __line_length_ptr, FILE* _Nonnull __fp);
123*8d67ca89SAndroid Build Coastguard Worker 
124*8d67ca89SAndroid Build Coastguard Worker void perror(const char* _Nullable __msg);
125*8d67ca89SAndroid Build Coastguard Worker int printf(const char* _Nonnull __fmt, ...) __printflike(1, 2);
126*8d67ca89SAndroid Build Coastguard Worker int putc(int __ch, FILE* _Nonnull __fp);
127*8d67ca89SAndroid Build Coastguard Worker int putchar(int __ch);
128*8d67ca89SAndroid Build Coastguard Worker int puts(const char* _Nonnull __s);
129*8d67ca89SAndroid Build Coastguard Worker int remove(const char* _Nonnull __path);
130*8d67ca89SAndroid Build Coastguard Worker void rewind(FILE* _Nonnull __fp);
131*8d67ca89SAndroid Build Coastguard Worker int scanf(const char* _Nonnull __fmt, ...) __scanflike(1, 2);
132*8d67ca89SAndroid Build Coastguard Worker void setbuf(FILE* _Nonnull __fp, char* _Nullable __buf);
133*8d67ca89SAndroid Build Coastguard Worker int setvbuf(FILE* _Nonnull __fp, char* _Nullable __buf, int __mode, size_t __size);
134*8d67ca89SAndroid Build Coastguard Worker int sscanf(const char* _Nonnull __s, const char* _Nonnull __fmt, ...) __scanflike(2, 3);
135*8d67ca89SAndroid Build Coastguard Worker int ungetc(int __ch, FILE* _Nonnull __fp);
136*8d67ca89SAndroid Build Coastguard Worker int vfprintf(FILE* _Nonnull __fp, const char* _Nonnull __fmt, va_list __args) __printflike(2, 0);
137*8d67ca89SAndroid Build Coastguard Worker int vprintf(const char* _Nonnull __fp, va_list __args) __printflike(1, 0);
138*8d67ca89SAndroid Build Coastguard Worker 
139*8d67ca89SAndroid Build Coastguard Worker int dprintf(int __fd, const char* _Nonnull __fmt, ...) __printflike(2, 3);
140*8d67ca89SAndroid Build Coastguard Worker int vdprintf(int __fd, const char* _Nonnull __fmt, va_list __args) __printflike(2, 0);
141*8d67ca89SAndroid Build Coastguard Worker 
142*8d67ca89SAndroid Build Coastguard Worker #if (defined(__STDC_VERSION__) && __STDC_VERSION__ < 201112L) || \
143*8d67ca89SAndroid Build Coastguard Worker     (defined(__cplusplus) && __cplusplus <= 201103L)
144*8d67ca89SAndroid Build Coastguard Worker char* _Nullable gets(char* _Nonnull __buf) __attribute__((__deprecated__("gets is unsafe, use fgets instead")));
145*8d67ca89SAndroid Build Coastguard Worker #endif
146*8d67ca89SAndroid Build Coastguard Worker int sprintf(char* __BIONIC_COMPLICATED_NULLNESS __s, const char* _Nonnull __fmt, ...)
147*8d67ca89SAndroid Build Coastguard Worker     __printflike(2, 3) __warnattr_strict("sprintf is often misused; please use snprintf");
148*8d67ca89SAndroid Build Coastguard Worker int vsprintf(char* __BIONIC_COMPLICATED_NULLNESS __s, const char* _Nonnull __fmt, va_list __args)
149*8d67ca89SAndroid Build Coastguard Worker     __printflike(2, 0) __warnattr_strict("vsprintf is often misused; please use vsnprintf");
150*8d67ca89SAndroid Build Coastguard Worker char* _Nullable tmpnam(char* _Nullable __s)
151*8d67ca89SAndroid Build Coastguard Worker     __warnattr("tmpnam is unsafe, use mkstemp or tmpfile instead");
152*8d67ca89SAndroid Build Coastguard Worker #define P_tmpdir "/tmp/" /* deprecated */
153*8d67ca89SAndroid Build Coastguard Worker char* _Nullable tempnam(const char* _Nullable __dir, const char* _Nullable __prefix)
154*8d67ca89SAndroid Build Coastguard Worker     __warnattr("tempnam is unsafe, use mkstemp or tmpfile instead");
155*8d67ca89SAndroid Build Coastguard Worker 
156*8d67ca89SAndroid Build Coastguard Worker /**
157*8d67ca89SAndroid Build Coastguard Worker  * [rename(2)](https://man7.org/linux/man-pages/man2/rename.2.html) changes
158*8d67ca89SAndroid Build Coastguard Worker  * the name or location of a file.
159*8d67ca89SAndroid Build Coastguard Worker  *
160*8d67ca89SAndroid Build Coastguard Worker  * Returns 0 on success, and returns -1 and sets `errno` on failure.
161*8d67ca89SAndroid Build Coastguard Worker  */
162*8d67ca89SAndroid Build Coastguard Worker int rename(const char* _Nonnull __old_path, const char* _Nonnull __new_path);
163*8d67ca89SAndroid Build Coastguard Worker 
164*8d67ca89SAndroid Build Coastguard Worker /**
165*8d67ca89SAndroid Build Coastguard Worker  * [renameat(2)](https://man7.org/linux/man-pages/man2/renameat.2.html) changes
166*8d67ca89SAndroid Build Coastguard Worker  * the name or location of a file, interpreting relative paths using an fd.
167*8d67ca89SAndroid Build Coastguard Worker  *
168*8d67ca89SAndroid Build Coastguard Worker  * Returns 0 on success, and returns -1 and sets `errno` on failure.
169*8d67ca89SAndroid Build Coastguard Worker  */
170*8d67ca89SAndroid Build Coastguard Worker int renameat(int __old_dir_fd, const char* _Nonnull __old_path, int __new_dir_fd, const char* _Nonnull __new_path);
171*8d67ca89SAndroid Build Coastguard Worker 
172*8d67ca89SAndroid Build Coastguard Worker #if defined(__USE_GNU)
173*8d67ca89SAndroid Build Coastguard Worker 
174*8d67ca89SAndroid Build Coastguard Worker /**
175*8d67ca89SAndroid Build Coastguard Worker  * Flag for [renameat2(2)](https://man7.org/linux/man-pages/man2/renameat2.2.html)
176*8d67ca89SAndroid Build Coastguard Worker  * to fail if the new path already exists.
177*8d67ca89SAndroid Build Coastguard Worker  */
178*8d67ca89SAndroid Build Coastguard Worker #define RENAME_NOREPLACE (1<<0)
179*8d67ca89SAndroid Build Coastguard Worker 
180*8d67ca89SAndroid Build Coastguard Worker /**
181*8d67ca89SAndroid Build Coastguard Worker  * Flag for [renameat2(2)](https://man7.org/linux/man-pages/man2/renameat2.2.html)
182*8d67ca89SAndroid Build Coastguard Worker  * to atomically exchange the two paths.
183*8d67ca89SAndroid Build Coastguard Worker  */
184*8d67ca89SAndroid Build Coastguard Worker #define RENAME_EXCHANGE (1<<1)
185*8d67ca89SAndroid Build Coastguard Worker 
186*8d67ca89SAndroid Build Coastguard Worker /**
187*8d67ca89SAndroid Build Coastguard Worker  * Flag for [renameat2(2)](https://man7.org/linux/man-pages/man2/renameat2.2.html)
188*8d67ca89SAndroid Build Coastguard Worker  * to create a union/overlay filesystem object.
189*8d67ca89SAndroid Build Coastguard Worker  */
190*8d67ca89SAndroid Build Coastguard Worker #define RENAME_WHITEOUT (1<<2)
191*8d67ca89SAndroid Build Coastguard Worker 
192*8d67ca89SAndroid Build Coastguard Worker /**
193*8d67ca89SAndroid Build Coastguard Worker  * [renameat2(2)](https://man7.org/linux/man-pages/man2/renameat2.2.html) changes
194*8d67ca89SAndroid Build Coastguard Worker  * the name or location of a file, interpreting relative paths using an fd,
195*8d67ca89SAndroid Build Coastguard Worker  * with optional `RENAME_` flags.
196*8d67ca89SAndroid Build Coastguard Worker  *
197*8d67ca89SAndroid Build Coastguard Worker  * Returns 0 on success, and returns -1 and sets `errno` on failure.
198*8d67ca89SAndroid Build Coastguard Worker  */
199*8d67ca89SAndroid Build Coastguard Worker 
200*8d67ca89SAndroid Build Coastguard Worker #if __BIONIC_AVAILABILITY_GUARD(30)
201*8d67ca89SAndroid Build Coastguard Worker int renameat2(int __old_dir_fd, const char* _Nonnull __old_path, int __new_dir_fd, const char* _Nonnull __new_path, unsigned __flags) __INTRODUCED_IN(30);
202*8d67ca89SAndroid Build Coastguard Worker #endif /* __BIONIC_AVAILABILITY_GUARD(30) */
203*8d67ca89SAndroid Build Coastguard Worker 
204*8d67ca89SAndroid Build Coastguard Worker 
205*8d67ca89SAndroid Build Coastguard Worker #endif
206*8d67ca89SAndroid Build Coastguard Worker 
207*8d67ca89SAndroid Build Coastguard Worker int fseek(FILE* _Nonnull __fp, long __offset, int __whence);
208*8d67ca89SAndroid Build Coastguard Worker __nodiscard long ftell(FILE* _Nonnull __fp);
209*8d67ca89SAndroid Build Coastguard Worker 
210*8d67ca89SAndroid Build Coastguard Worker /* See https://android.googlesource.com/platform/bionic/+/main/docs/32-bit-abi.md */
211*8d67ca89SAndroid Build Coastguard Worker #if defined(__USE_FILE_OFFSET64)
212*8d67ca89SAndroid Build Coastguard Worker 
213*8d67ca89SAndroid Build Coastguard Worker #if __BIONIC_AVAILABILITY_GUARD(24)
214*8d67ca89SAndroid Build Coastguard Worker int fgetpos(FILE* _Nonnull __fp, fpos_t* _Nonnull __pos) __RENAME(fgetpos64) __INTRODUCED_IN(24);
215*8d67ca89SAndroid Build Coastguard Worker int fsetpos(FILE* _Nonnull __fp, const fpos_t* _Nonnull __pos) __RENAME(fsetpos64) __INTRODUCED_IN(24);
216*8d67ca89SAndroid Build Coastguard Worker int fseeko(FILE* _Nonnull __fp, off_t __offset, int __whence) __RENAME(fseeko64) __INTRODUCED_IN(24);
217*8d67ca89SAndroid Build Coastguard Worker __nodiscard off_t ftello(FILE* _Nonnull __fp) __RENAME(ftello64) __INTRODUCED_IN(24);
218*8d67ca89SAndroid Build Coastguard Worker #endif /* __BIONIC_AVAILABILITY_GUARD(24) */
219*8d67ca89SAndroid Build Coastguard Worker 
220*8d67ca89SAndroid Build Coastguard Worker #  if defined(__USE_BSD)
221*8d67ca89SAndroid Build Coastguard Worker /* If __read_fn and __write_fn are both nullptr, it will cause EINVAL */
222*8d67ca89SAndroid Build Coastguard Worker 
223*8d67ca89SAndroid Build Coastguard Worker #if __BIONIC_AVAILABILITY_GUARD(24)
224*8d67ca89SAndroid Build Coastguard Worker __nodiscard FILE* _Nullable funopen(const void* _Nullable __cookie,
225*8d67ca89SAndroid Build Coastguard Worker               int (* __BIONIC_COMPLICATED_NULLNESS __read_fn)(void* _Nonnull, char* _Nonnull, int),
226*8d67ca89SAndroid Build Coastguard Worker               int (* __BIONIC_COMPLICATED_NULLNESS __write_fn)(void* _Nonnull, const char* _Nonnull, int),
227*8d67ca89SAndroid Build Coastguard Worker               fpos_t (* _Nullable __seek_fn)(void* _Nonnull, fpos_t, int),
228*8d67ca89SAndroid Build Coastguard Worker               int (* _Nullable __close_fn)(void* _Nonnull)) __RENAME(funopen64) __INTRODUCED_IN(24);
229*8d67ca89SAndroid Build Coastguard Worker #endif /* __BIONIC_AVAILABILITY_GUARD(24) */
230*8d67ca89SAndroid Build Coastguard Worker 
231*8d67ca89SAndroid Build Coastguard Worker #  endif
232*8d67ca89SAndroid Build Coastguard Worker #else
233*8d67ca89SAndroid Build Coastguard Worker int fgetpos(FILE* _Nonnull __fp, fpos_t* _Nonnull __pos);
234*8d67ca89SAndroid Build Coastguard Worker int fsetpos(FILE* _Nonnull __fp, const fpos_t* _Nonnull __pos);
235*8d67ca89SAndroid Build Coastguard Worker int fseeko(FILE* _Nonnull __fp, off_t __offset, int __whence);
236*8d67ca89SAndroid Build Coastguard Worker __nodiscard off_t ftello(FILE* _Nonnull __fp);
237*8d67ca89SAndroid Build Coastguard Worker #  if defined(__USE_BSD)
238*8d67ca89SAndroid Build Coastguard Worker /* If __read_fn and __write_fn are both nullptr, it will cause EINVAL */
239*8d67ca89SAndroid Build Coastguard Worker __nodiscard FILE* _Nullable funopen(const void* _Nullable __cookie,
240*8d67ca89SAndroid Build Coastguard Worker               int (* __BIONIC_COMPLICATED_NULLNESS __read_fn)(void* _Nonnull, char* _Nonnull, int),
241*8d67ca89SAndroid Build Coastguard Worker               int (* __BIONIC_COMPLICATED_NULLNESS __write_fn)(void* _Nonnull, const char* _Nonnull, int),
242*8d67ca89SAndroid Build Coastguard Worker               fpos_t (* _Nullable __seek_fn)(void* _Nonnull, fpos_t, int),
243*8d67ca89SAndroid Build Coastguard Worker               int (* _Nullable __close_fn)(void* _Nonnull));
244*8d67ca89SAndroid Build Coastguard Worker #  endif
245*8d67ca89SAndroid Build Coastguard Worker #endif
246*8d67ca89SAndroid Build Coastguard Worker 
247*8d67ca89SAndroid Build Coastguard Worker #if __BIONIC_AVAILABILITY_GUARD(24)
248*8d67ca89SAndroid Build Coastguard Worker int fgetpos64(FILE* _Nonnull __fp, fpos64_t* _Nonnull __pos) __INTRODUCED_IN(24);
249*8d67ca89SAndroid Build Coastguard Worker int fsetpos64(FILE* _Nonnull __fp, const fpos64_t* _Nonnull __pos) __INTRODUCED_IN(24);
250*8d67ca89SAndroid Build Coastguard Worker int fseeko64(FILE* _Nonnull __fp, off64_t __offset, int __whence) __INTRODUCED_IN(24);
251*8d67ca89SAndroid Build Coastguard Worker __nodiscard off64_t ftello64(FILE* _Nonnull __fp) __INTRODUCED_IN(24);
252*8d67ca89SAndroid Build Coastguard Worker #endif /* __BIONIC_AVAILABILITY_GUARD(24) */
253*8d67ca89SAndroid Build Coastguard Worker 
254*8d67ca89SAndroid Build Coastguard Worker #if defined(__USE_BSD)
255*8d67ca89SAndroid Build Coastguard Worker /* If __read_fn and __write_fn are both nullptr, it will cause EINVAL */
256*8d67ca89SAndroid Build Coastguard Worker 
257*8d67ca89SAndroid Build Coastguard Worker #if __BIONIC_AVAILABILITY_GUARD(24)
258*8d67ca89SAndroid Build Coastguard Worker __nodiscard FILE* _Nullable funopen64(const void* _Nullable __cookie,
259*8d67ca89SAndroid Build Coastguard Worker                 int (* __BIONIC_COMPLICATED_NULLNESS __read_fn)(void* _Nonnull, char* _Nonnull, int),
260*8d67ca89SAndroid Build Coastguard Worker                 int (* __BIONIC_COMPLICATED_NULLNESS __write_fn)(void* _Nonnull, const char* _Nonnull, int),
261*8d67ca89SAndroid Build Coastguard Worker                 fpos64_t (* _Nullable __seek_fn)(void* _Nonnull, fpos64_t, int),
262*8d67ca89SAndroid Build Coastguard Worker                 int (* _Nullable __close_fn)(void* _Nonnull)) __INTRODUCED_IN(24);
263*8d67ca89SAndroid Build Coastguard Worker #endif /* __BIONIC_AVAILABILITY_GUARD(24) */
264*8d67ca89SAndroid Build Coastguard Worker 
265*8d67ca89SAndroid Build Coastguard Worker #endif
266*8d67ca89SAndroid Build Coastguard Worker 
267*8d67ca89SAndroid Build Coastguard Worker __nodiscard FILE* _Nullable fopen(const char* _Nonnull __path, const char* _Nonnull __mode);
268*8d67ca89SAndroid Build Coastguard Worker 
269*8d67ca89SAndroid Build Coastguard Worker #if __BIONIC_AVAILABILITY_GUARD(24)
270*8d67ca89SAndroid Build Coastguard Worker __nodiscard FILE* _Nullable fopen64(const char* _Nonnull __path, const char* _Nonnull __mode) __INTRODUCED_IN(24);
271*8d67ca89SAndroid Build Coastguard Worker #endif /* __BIONIC_AVAILABILITY_GUARD(24) */
272*8d67ca89SAndroid Build Coastguard Worker 
273*8d67ca89SAndroid Build Coastguard Worker FILE* _Nullable freopen(const char* _Nullable __path, const char* _Nonnull __mode, FILE* _Nonnull __fp);
274*8d67ca89SAndroid Build Coastguard Worker 
275*8d67ca89SAndroid Build Coastguard Worker #if __BIONIC_AVAILABILITY_GUARD(24)
276*8d67ca89SAndroid Build Coastguard Worker FILE* _Nullable freopen64(const char* _Nullable __path, const char* _Nonnull __mode, FILE* _Nonnull __fp) __INTRODUCED_IN(24);
277*8d67ca89SAndroid Build Coastguard Worker #endif /* __BIONIC_AVAILABILITY_GUARD(24) */
278*8d67ca89SAndroid Build Coastguard Worker 
279*8d67ca89SAndroid Build Coastguard Worker __nodiscard FILE* _Nullable tmpfile(void);
280*8d67ca89SAndroid Build Coastguard Worker 
281*8d67ca89SAndroid Build Coastguard Worker #if __BIONIC_AVAILABILITY_GUARD(24)
282*8d67ca89SAndroid Build Coastguard Worker __nodiscard FILE* _Nullable tmpfile64(void) __INTRODUCED_IN(24);
283*8d67ca89SAndroid Build Coastguard Worker #endif /* __BIONIC_AVAILABILITY_GUARD(24) */
284*8d67ca89SAndroid Build Coastguard Worker 
285*8d67ca89SAndroid Build Coastguard Worker 
286*8d67ca89SAndroid Build Coastguard Worker int snprintf(char* __BIONIC_COMPLICATED_NULLNESS __buf, size_t __size, const char* _Nonnull __fmt, ...) __printflike(3, 4);
287*8d67ca89SAndroid Build Coastguard Worker int vfscanf(FILE* _Nonnull __fp, const char* _Nonnull __fmt, va_list __args) __scanflike(2, 0);
288*8d67ca89SAndroid Build Coastguard Worker int vscanf(const char* _Nonnull __fmt , va_list __args) __scanflike(1, 0);
289*8d67ca89SAndroid Build Coastguard Worker int vsnprintf(char* __BIONIC_COMPLICATED_NULLNESS __buf, size_t __size, const char* _Nonnull __fmt, va_list __args) __printflike(3, 0);
290*8d67ca89SAndroid Build Coastguard Worker int vsscanf(const char* _Nonnull __s, const char* _Nonnull __fmt, va_list __args) __scanflike(2, 0);
291*8d67ca89SAndroid Build Coastguard Worker 
292*8d67ca89SAndroid Build Coastguard Worker #define L_ctermid 1024 /* size for ctermid() */
293*8d67ca89SAndroid Build Coastguard Worker 
294*8d67ca89SAndroid Build Coastguard Worker #if __BIONIC_AVAILABILITY_GUARD(26)
295*8d67ca89SAndroid Build Coastguard Worker char* _Nonnull ctermid(char* _Nullable __buf) __INTRODUCED_IN(26);
296*8d67ca89SAndroid Build Coastguard Worker #endif /* __BIONIC_AVAILABILITY_GUARD(26) */
297*8d67ca89SAndroid Build Coastguard Worker 
298*8d67ca89SAndroid Build Coastguard Worker 
299*8d67ca89SAndroid Build Coastguard Worker __nodiscard FILE* _Nullable fdopen(int __fd, const char* _Nonnull __mode);
300*8d67ca89SAndroid Build Coastguard Worker __nodiscard int fileno(FILE* _Nonnull __fp);
301*8d67ca89SAndroid Build Coastguard Worker int pclose(FILE* _Nonnull __fp);
302*8d67ca89SAndroid Build Coastguard Worker __nodiscard FILE* _Nullable popen(const char* _Nonnull __command, const char* _Nonnull __mode);
303*8d67ca89SAndroid Build Coastguard Worker void flockfile(FILE* _Nonnull  __fp);
304*8d67ca89SAndroid Build Coastguard Worker int ftrylockfile(FILE* _Nonnull __fp);
305*8d67ca89SAndroid Build Coastguard Worker void funlockfile(FILE* _Nonnull __fp);
306*8d67ca89SAndroid Build Coastguard Worker __nodiscard int getc_unlocked(FILE* _Nonnull __fp);
307*8d67ca89SAndroid Build Coastguard Worker __nodiscard int getchar_unlocked(void);
308*8d67ca89SAndroid Build Coastguard Worker int putc_unlocked(int __ch, FILE* _Nonnull __fp);
309*8d67ca89SAndroid Build Coastguard Worker int putchar_unlocked(int __ch);
310*8d67ca89SAndroid Build Coastguard Worker 
311*8d67ca89SAndroid Build Coastguard Worker 
312*8d67ca89SAndroid Build Coastguard Worker #if __BIONIC_AVAILABILITY_GUARD(23)
313*8d67ca89SAndroid Build Coastguard Worker __nodiscard FILE* _Nullable fmemopen(void* _Nullable __buf, size_t __size, const char* _Nonnull __mode) __INTRODUCED_IN(23);
314*8d67ca89SAndroid Build Coastguard Worker __nodiscard FILE* _Nullable open_memstream(char* _Nonnull * _Nonnull __ptr, size_t* _Nonnull __size_ptr) __INTRODUCED_IN(23);
315*8d67ca89SAndroid Build Coastguard Worker #endif /* __BIONIC_AVAILABILITY_GUARD(23) */
316*8d67ca89SAndroid Build Coastguard Worker 
317*8d67ca89SAndroid Build Coastguard Worker 
318*8d67ca89SAndroid Build Coastguard Worker #if defined(__USE_BSD) || defined(__BIONIC__) /* Historically bionic exposed these. */
319*8d67ca89SAndroid Build Coastguard Worker int  asprintf(char* _Nullable * _Nonnull __s_ptr, const char* _Nonnull __fmt, ...) __printflike(2, 3);
320*8d67ca89SAndroid Build Coastguard Worker char* _Nullable fgetln(FILE* _Nonnull __fp, size_t* _Nonnull __length_ptr);
321*8d67ca89SAndroid Build Coastguard Worker int fpurge(FILE* _Nonnull __fp);
322*8d67ca89SAndroid Build Coastguard Worker void setbuffer(FILE* _Nonnull __fp, char* _Nullable __buf, int __size);
323*8d67ca89SAndroid Build Coastguard Worker int setlinebuf(FILE* _Nonnull __fp);
324*8d67ca89SAndroid Build Coastguard Worker int vasprintf(char* _Nullable * _Nonnull __s_ptr, const char* _Nonnull __fmt, va_list __args) __printflike(2, 0);
325*8d67ca89SAndroid Build Coastguard Worker 
326*8d67ca89SAndroid Build Coastguard Worker #if __BIONIC_AVAILABILITY_GUARD(23)
327*8d67ca89SAndroid Build Coastguard Worker void clearerr_unlocked(FILE* _Nonnull __fp) __INTRODUCED_IN(23);
328*8d67ca89SAndroid Build Coastguard Worker __nodiscard int feof_unlocked(FILE* _Nonnull __fp) __INTRODUCED_IN(23);
329*8d67ca89SAndroid Build Coastguard Worker __nodiscard int ferror_unlocked(FILE* _Nonnull __fp) __INTRODUCED_IN(23);
330*8d67ca89SAndroid Build Coastguard Worker #endif /* __BIONIC_AVAILABILITY_GUARD(23) */
331*8d67ca89SAndroid Build Coastguard Worker 
332*8d67ca89SAndroid Build Coastguard Worker 
333*8d67ca89SAndroid Build Coastguard Worker #if __BIONIC_AVAILABILITY_GUARD(24)
334*8d67ca89SAndroid Build Coastguard Worker __nodiscard int fileno_unlocked(FILE* _Nonnull __fp) __INTRODUCED_IN(24);
335*8d67ca89SAndroid Build Coastguard Worker #endif /* __BIONIC_AVAILABILITY_GUARD(24) */
336*8d67ca89SAndroid Build Coastguard Worker 
337*8d67ca89SAndroid Build Coastguard Worker #define fropen(cookie, fn) funopen(cookie, fn, 0, 0, 0)
338*8d67ca89SAndroid Build Coastguard Worker #define fwopen(cookie, fn) funopen(cookie, 0, fn, 0, 0)
339*8d67ca89SAndroid Build Coastguard Worker #endif
340*8d67ca89SAndroid Build Coastguard Worker 
341*8d67ca89SAndroid Build Coastguard Worker #if defined(__USE_BSD)
342*8d67ca89SAndroid Build Coastguard Worker 
343*8d67ca89SAndroid Build Coastguard Worker #if __BIONIC_AVAILABILITY_GUARD(28)
344*8d67ca89SAndroid Build Coastguard Worker int fflush_unlocked(FILE* _Nullable __fp) __INTRODUCED_IN(28);
345*8d67ca89SAndroid Build Coastguard Worker __nodiscard int fgetc_unlocked(FILE* _Nonnull __fp) __INTRODUCED_IN(28);
346*8d67ca89SAndroid Build Coastguard Worker int fputc_unlocked(int __ch, FILE* _Nonnull __fp) __INTRODUCED_IN(28);
347*8d67ca89SAndroid Build Coastguard Worker size_t fread_unlocked(void* _Nonnull __buf, size_t __size, size_t __count, FILE* _Nonnull __fp) __INTRODUCED_IN(28);
348*8d67ca89SAndroid Build Coastguard Worker size_t fwrite_unlocked(const void* _Nonnull __buf, size_t __size, size_t __count, FILE* _Nonnull __fp) __INTRODUCED_IN(28);
349*8d67ca89SAndroid Build Coastguard Worker #endif /* __BIONIC_AVAILABILITY_GUARD(28) */
350*8d67ca89SAndroid Build Coastguard Worker 
351*8d67ca89SAndroid Build Coastguard Worker #endif
352*8d67ca89SAndroid Build Coastguard Worker 
353*8d67ca89SAndroid Build Coastguard Worker #if defined(__USE_GNU)
354*8d67ca89SAndroid Build Coastguard Worker 
355*8d67ca89SAndroid Build Coastguard Worker #if __BIONIC_AVAILABILITY_GUARD(28)
356*8d67ca89SAndroid Build Coastguard Worker int fputs_unlocked(const char* _Nonnull __s, FILE* _Nonnull __fp) __INTRODUCED_IN(28);
357*8d67ca89SAndroid Build Coastguard Worker char* _Nullable fgets_unlocked(char* _Nonnull __buf, int __size, FILE* _Nonnull __fp) __INTRODUCED_IN(28);
358*8d67ca89SAndroid Build Coastguard Worker #endif /* __BIONIC_AVAILABILITY_GUARD(28) */
359*8d67ca89SAndroid Build Coastguard Worker 
360*8d67ca89SAndroid Build Coastguard Worker #endif
361*8d67ca89SAndroid Build Coastguard Worker 
362*8d67ca89SAndroid Build Coastguard Worker #if defined(__BIONIC_INCLUDE_FORTIFY_HEADERS)
363*8d67ca89SAndroid Build Coastguard Worker #include <bits/fortify/stdio.h>
364*8d67ca89SAndroid Build Coastguard Worker #endif
365*8d67ca89SAndroid Build Coastguard Worker 
366*8d67ca89SAndroid Build Coastguard Worker __END_DECLS
367*8d67ca89SAndroid Build Coastguard Worker 
368*8d67ca89SAndroid Build Coastguard Worker #endif
369