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