1570af302Sopenharmony_ci#ifndef _STDIO_H 2570af302Sopenharmony_ci#define _STDIO_H 3570af302Sopenharmony_ci 4570af302Sopenharmony_ci#ifdef __cplusplus 5570af302Sopenharmony_ciextern "C" { 6570af302Sopenharmony_ci#endif 7570af302Sopenharmony_ci 8570af302Sopenharmony_ci#include <features.h> 9570af302Sopenharmony_ci#include <stdint.h> 10570af302Sopenharmony_ci 11570af302Sopenharmony_ci#define __NEED_FILE 12570af302Sopenharmony_ci#define __NEED___isoc_va_list 13570af302Sopenharmony_ci#define __NEED_size_t 14570af302Sopenharmony_ci 15570af302Sopenharmony_ci#if __STDC_VERSION__ < 201112L 16570af302Sopenharmony_ci#define __NEED_struct__IO_FILE 17570af302Sopenharmony_ci#endif 18570af302Sopenharmony_ci 19570af302Sopenharmony_ci#if defined(_POSIX_SOURCE) || defined(_POSIX_C_SOURCE) \ 20570af302Sopenharmony_ci || defined(_XOPEN_SOURCE) || defined(_GNU_SOURCE) \ 21570af302Sopenharmony_ci || defined(_BSD_SOURCE) 22570af302Sopenharmony_ci#define __NEED_ssize_t 23570af302Sopenharmony_ci#define __NEED_off_t 24570af302Sopenharmony_ci#define __NEED_va_list 25570af302Sopenharmony_ci#endif 26570af302Sopenharmony_ci 27570af302Sopenharmony_ci#include <bits/alltypes.h> 28570af302Sopenharmony_ci 29570af302Sopenharmony_ci#if __cplusplus >= 201103L 30570af302Sopenharmony_ci#define NULL nullptr 31570af302Sopenharmony_ci#elif defined(__cplusplus) 32570af302Sopenharmony_ci#define NULL 0L 33570af302Sopenharmony_ci#else 34570af302Sopenharmony_ci#define NULL ((void*)0) 35570af302Sopenharmony_ci#endif 36570af302Sopenharmony_ci 37570af302Sopenharmony_ci#undef EOF 38570af302Sopenharmony_ci#define EOF (-1) 39570af302Sopenharmony_ci 40570af302Sopenharmony_ci#undef SEEK_SET 41570af302Sopenharmony_ci#undef SEEK_CUR 42570af302Sopenharmony_ci#undef SEEK_END 43570af302Sopenharmony_ci#define SEEK_SET 0 44570af302Sopenharmony_ci#define SEEK_CUR 1 45570af302Sopenharmony_ci#define SEEK_END 2 46570af302Sopenharmony_ci 47570af302Sopenharmony_ci#define _IOFBF 0 48570af302Sopenharmony_ci#define _IOLBF 1 49570af302Sopenharmony_ci#define _IONBF 2 50570af302Sopenharmony_ci 51570af302Sopenharmony_ci#define BUFSIZ 1024 52570af302Sopenharmony_ci#define FILENAME_MAX 4096 53570af302Sopenharmony_ci#define FOPEN_MAX 1000 54570af302Sopenharmony_ci#define TMP_MAX 10000 55570af302Sopenharmony_ci#define L_tmpnam 20 56570af302Sopenharmony_ci 57570af302Sopenharmony_citypedef union _G_fpos64_t { 58570af302Sopenharmony_ci char __opaque[16]; 59570af302Sopenharmony_ci long long __lldata; 60570af302Sopenharmony_ci double __align; 61570af302Sopenharmony_ci} fpos_t; 62570af302Sopenharmony_ci 63570af302Sopenharmony_ciextern FILE *const stdin; 64570af302Sopenharmony_ciextern FILE *const stdout; 65570af302Sopenharmony_ciextern FILE *const stderr; 66570af302Sopenharmony_ci 67570af302Sopenharmony_ci#define stdin (stdin) 68570af302Sopenharmony_ci#define stdout (stdout) 69570af302Sopenharmony_ci#define stderr (stderr) 70570af302Sopenharmony_ci 71570af302Sopenharmony_ciFILE *fopen(const char *__restrict, const char *__restrict); 72570af302Sopenharmony_ciFILE *freopen(const char *__restrict, const char *__restrict, FILE *__restrict); 73570af302Sopenharmony_ciint fclose(FILE *); 74570af302Sopenharmony_ci 75570af302Sopenharmony_ciint remove(const char *); 76570af302Sopenharmony_ciint rename(const char *, const char *); 77570af302Sopenharmony_ci 78570af302Sopenharmony_ciint feof(FILE *); 79570af302Sopenharmony_ciint ferror(FILE *); 80570af302Sopenharmony_ciint fflush(FILE *); 81570af302Sopenharmony_civoid clearerr(FILE *); 82570af302Sopenharmony_ci 83570af302Sopenharmony_ciint fseek(FILE *, long, int); 84570af302Sopenharmony_cilong ftell(FILE *); 85570af302Sopenharmony_civoid rewind(FILE *); 86570af302Sopenharmony_ci 87570af302Sopenharmony_ciint fgetpos(FILE *__restrict, fpos_t *__restrict); 88570af302Sopenharmony_ciint fsetpos(FILE *, const fpos_t *); 89570af302Sopenharmony_ci 90570af302Sopenharmony_cisize_t fread(void *__restrict, size_t, size_t, FILE *__restrict); 91570af302Sopenharmony_cisize_t fwrite(const void *__restrict, size_t, size_t, FILE *__restrict); 92570af302Sopenharmony_ci 93570af302Sopenharmony_ciint fgetc(FILE *); 94570af302Sopenharmony_ciint getc(FILE *); 95570af302Sopenharmony_ciint getchar(void); 96570af302Sopenharmony_ciint ungetc(int, FILE *); 97570af302Sopenharmony_ci 98570af302Sopenharmony_ciint fputc(int, FILE *); 99570af302Sopenharmony_ciint putc(int, FILE *); 100570af302Sopenharmony_ciint putchar(int); 101570af302Sopenharmony_ci 102570af302Sopenharmony_cichar *fgets(char *__restrict, int, FILE *__restrict); 103570af302Sopenharmony_ci#if __STDC_VERSION__ < 201112L 104570af302Sopenharmony_cichar *gets(char *); 105570af302Sopenharmony_ci#endif 106570af302Sopenharmony_ci 107570af302Sopenharmony_ciint fputs(const char *__restrict, FILE *__restrict); 108570af302Sopenharmony_ciint puts(const char *); 109570af302Sopenharmony_ci 110570af302Sopenharmony_ciint printf(const char *__restrict, ...); 111570af302Sopenharmony_ciint fprintf(FILE *__restrict, const char *__restrict, ...); 112570af302Sopenharmony_ciint sprintf(char *__restrict, const char *__restrict, ...); 113570af302Sopenharmony_ciint snprintf(char *__restrict, size_t, const char *__restrict, ...); 114570af302Sopenharmony_ci 115570af302Sopenharmony_ciint vprintf(const char *__restrict, __isoc_va_list); 116570af302Sopenharmony_ciint vfprintf(FILE *__restrict, const char *__restrict, __isoc_va_list); 117570af302Sopenharmony_ciint vsprintf(char *__restrict, const char *__restrict, __isoc_va_list); 118570af302Sopenharmony_ciint vsnprintf(char *__restrict, size_t, const char *__restrict, __isoc_va_list); 119570af302Sopenharmony_ci 120570af302Sopenharmony_ciint scanf(const char *__restrict, ...); 121570af302Sopenharmony_ciint fscanf(FILE *__restrict, const char *__restrict, ...); 122570af302Sopenharmony_ciint sscanf(const char *__restrict, const char *__restrict, ...); 123570af302Sopenharmony_ciint vscanf(const char *__restrict, __isoc_va_list); 124570af302Sopenharmony_ciint vfscanf(FILE *__restrict, const char *__restrict, __isoc_va_list); 125570af302Sopenharmony_ciint vsscanf(const char *__restrict, const char *__restrict, __isoc_va_list); 126570af302Sopenharmony_ci 127570af302Sopenharmony_civoid perror(const char *); 128570af302Sopenharmony_ci 129570af302Sopenharmony_ciint setvbuf(FILE *__restrict, char *__restrict, int, size_t); 130570af302Sopenharmony_civoid setbuf(FILE *__restrict, char *__restrict); 131570af302Sopenharmony_ci 132570af302Sopenharmony_cichar *tmpnam(char *); 133570af302Sopenharmony_ciFILE *tmpfile(void); 134570af302Sopenharmony_ci 135570af302Sopenharmony_ci#if defined(_POSIX_SOURCE) || defined(_POSIX_C_SOURCE) \ 136570af302Sopenharmony_ci || defined(_XOPEN_SOURCE) || defined(_GNU_SOURCE) \ 137570af302Sopenharmony_ci || defined(_BSD_SOURCE) 138570af302Sopenharmony_ciFILE *fmemopen(void *__restrict, size_t, const char *__restrict); 139570af302Sopenharmony_ciFILE *open_memstream(char **, size_t *); 140570af302Sopenharmony_ciFILE *fdopen(int, const char *); 141570af302Sopenharmony_ciFILE *popen(const char *, const char *); 142570af302Sopenharmony_ciint pclose(FILE *); 143570af302Sopenharmony_ciint fileno(FILE *); 144570af302Sopenharmony_ciint fseeko(FILE *, off_t, int); 145570af302Sopenharmony_cioff_t ftello(FILE *); 146570af302Sopenharmony_ciint dprintf(int, const char *__restrict, ...); 147570af302Sopenharmony_ciint vdprintf(int, const char *__restrict, __isoc_va_list); 148570af302Sopenharmony_civoid flockfile(FILE *); 149570af302Sopenharmony_ciint ftrylockfile(FILE *); 150570af302Sopenharmony_civoid funlockfile(FILE *); 151570af302Sopenharmony_ciint getc_unlocked(FILE *); 152570af302Sopenharmony_ciint getchar_unlocked(void); 153570af302Sopenharmony_ciint putc_unlocked(int, FILE *); 154570af302Sopenharmony_ciint putchar_unlocked(int); 155570af302Sopenharmony_cissize_t getdelim(char **__restrict, size_t *__restrict, int, FILE *__restrict); 156570af302Sopenharmony_cissize_t getline(char **__restrict, size_t *__restrict, FILE *__restrict); 157570af302Sopenharmony_ciint renameat(int, const char *, int, const char *); 158570af302Sopenharmony_ci#define RENAME_NOREPLACE (1 << 0) 159570af302Sopenharmony_ci#define RENAME_EXCHANGE (1 << 1) 160570af302Sopenharmony_ci#define RENAME_WHITEOUT (1 << 2) 161570af302Sopenharmony_ciint renameat2(int, const char *, int, const char *, unsigned int); 162570af302Sopenharmony_cichar *ctermid(char *); 163570af302Sopenharmony_ci#define L_ctermid 20 164570af302Sopenharmony_ci#endif 165570af302Sopenharmony_ci 166570af302Sopenharmony_ci 167570af302Sopenharmony_ci#if defined(_XOPEN_SOURCE) || defined(_GNU_SOURCE) \ 168570af302Sopenharmony_ci || defined(_BSD_SOURCE) 169570af302Sopenharmony_ci#define P_tmpdir "/tmp" 170570af302Sopenharmony_cichar *tempnam(const char *, const char *); 171570af302Sopenharmony_ci#endif 172570af302Sopenharmony_ci 173570af302Sopenharmony_ci#if defined(_GNU_SOURCE) || defined(_BSD_SOURCE) 174570af302Sopenharmony_ci#define L_cuserid 20 175570af302Sopenharmony_cichar *cuserid(char *); 176570af302Sopenharmony_civoid setlinebuf(FILE *); 177570af302Sopenharmony_civoid setbuffer(FILE *, char *, size_t); 178570af302Sopenharmony_ciint fgetc_unlocked(FILE *); 179570af302Sopenharmony_ciint fputc_unlocked(int, FILE *); 180570af302Sopenharmony_ciint fflush_unlocked(FILE *); 181570af302Sopenharmony_cisize_t fread_unlocked(void *, size_t, size_t, FILE *); 182570af302Sopenharmony_cisize_t fwrite_unlocked(const void *, size_t, size_t, FILE *); 183570af302Sopenharmony_civoid clearerr_unlocked(FILE *); 184570af302Sopenharmony_ciint feof_unlocked(FILE *); 185570af302Sopenharmony_ciint ferror_unlocked(FILE *); 186570af302Sopenharmony_ciint fileno_unlocked(FILE *); 187570af302Sopenharmony_ciint getw(FILE *); 188570af302Sopenharmony_ciint putw(int, FILE *); 189570af302Sopenharmony_cichar *fgetln(FILE *, size_t *); 190570af302Sopenharmony_ciint asprintf(char **, const char *, ...); 191570af302Sopenharmony_ciint vasprintf(char **, const char *, __isoc_va_list); 192570af302Sopenharmony_ci#endif 193570af302Sopenharmony_ci 194570af302Sopenharmony_ci#ifdef _GNU_SOURCE 195570af302Sopenharmony_cichar *fgets_unlocked(char *, int, FILE *); 196570af302Sopenharmony_ciint fputs_unlocked(const char *, FILE *); 197570af302Sopenharmony_ci 198570af302Sopenharmony_citypedef ssize_t (cookie_read_function_t)(void *, char *, size_t); 199570af302Sopenharmony_citypedef ssize_t (cookie_write_function_t)(void *, const char *, size_t); 200570af302Sopenharmony_citypedef int (cookie_seek_function_t)(void *, off_t *, int); 201570af302Sopenharmony_citypedef int (cookie_close_function_t)(void *); 202570af302Sopenharmony_ci 203570af302Sopenharmony_citypedef struct _IO_cookie_io_functions_t { 204570af302Sopenharmony_ci cookie_read_function_t *read; 205570af302Sopenharmony_ci cookie_write_function_t *write; 206570af302Sopenharmony_ci cookie_seek_function_t *seek; 207570af302Sopenharmony_ci cookie_close_function_t *close; 208570af302Sopenharmony_ci} cookie_io_functions_t; 209570af302Sopenharmony_ci 210570af302Sopenharmony_ciFILE *fopencookie(void *, const char *, cookie_io_functions_t); 211570af302Sopenharmony_ci#endif 212570af302Sopenharmony_ci 213570af302Sopenharmony_ci#if defined(_LARGEFILE64_SOURCE) || defined(_GNU_SOURCE) 214570af302Sopenharmony_ci#define tmpfile64 tmpfile 215570af302Sopenharmony_ci#define fopen64 fopen 216570af302Sopenharmony_ci#define freopen64 freopen 217570af302Sopenharmony_ci#define fseeko64 fseeko 218570af302Sopenharmony_ci#define ftello64 ftello 219570af302Sopenharmony_ci#define fgetpos64 fgetpos 220570af302Sopenharmony_ci#define fsetpos64 fsetpos 221570af302Sopenharmony_ci#define fpos64_t fpos_t 222570af302Sopenharmony_ci#define off64_t off_t 223570af302Sopenharmony_ci#endif 224570af302Sopenharmony_ci 225570af302Sopenharmony_cienum fdsan_owner_type { 226570af302Sopenharmony_ci FDSAN_OWNER_TYPE_DEFAULT = 0, 227570af302Sopenharmony_ci FDSAN_OWNER_TYPE_MAX = 255, 228570af302Sopenharmony_ci 229570af302Sopenharmony_ci /* FILE* */ 230570af302Sopenharmony_ci FDSAN_OWNER_TYPE_FILE = 1, 231570af302Sopenharmony_ci 232570af302Sopenharmony_ci /* DIR* */ 233570af302Sopenharmony_ci FDSAN_OWNER_TYPE_DIRECTORY = 2, 234570af302Sopenharmony_ci 235570af302Sopenharmony_ci /* unique_fd */ 236570af302Sopenharmony_ci FDSAN_OWNER_TYPE_UNIQUE_FD = 3, 237570af302Sopenharmony_ci 238570af302Sopenharmony_ci /* ziparchive */ 239570af302Sopenharmony_ci FDSAN_OWNER_TYPE_ZIP_ARCHIVE = 4, 240570af302Sopenharmony_ci}; 241570af302Sopenharmony_ci 242570af302Sopenharmony_civoid* fdsan_get_fd_table(); 243570af302Sopenharmony_ciuint64_t fdsan_create_owner_tag(enum fdsan_owner_type type, uint64_t tag); 244570af302Sopenharmony_civoid fdsan_exchange_owner_tag(int fd, uint64_t expected_tag, uint64_t new_tag); 245570af302Sopenharmony_ciint fdsan_close_with_tag(int fd, uint64_t tag); 246570af302Sopenharmony_ciuint64_t fdsan_get_owner_tag(int fd); 247570af302Sopenharmony_ciconst char* fdsan_get_tag_type(uint64_t tag); 248570af302Sopenharmony_ciuint64_t fdsan_get_tag_value(uint64_t tag); 249570af302Sopenharmony_ci 250570af302Sopenharmony_cienum fdsan_error_level { 251570af302Sopenharmony_ci // No errors. 252570af302Sopenharmony_ci FDSAN_ERROR_LEVEL_DISABLED, 253570af302Sopenharmony_ci 254570af302Sopenharmony_ci // Warn once(ish) on error, and then downgrade to FDSAN_ERROR_LEVEL_DISABLED. 255570af302Sopenharmony_ci FDSAN_ERROR_LEVEL_WARN_ONCE, 256570af302Sopenharmony_ci 257570af302Sopenharmony_ci // Warn always on error. 258570af302Sopenharmony_ci FDSAN_ERROR_LEVEL_WARN_ALWAYS, 259570af302Sopenharmony_ci 260570af302Sopenharmony_ci // Abort on error. 261570af302Sopenharmony_ci FDSAN_ERROR_LEVEL_FATAL, 262570af302Sopenharmony_ci}; 263570af302Sopenharmony_ci 264570af302Sopenharmony_cienum fdsan_error_level fdsan_get_error_level(); 265570af302Sopenharmony_cienum fdsan_error_level fdsan_set_error_level(enum fdsan_error_level new_level); 266570af302Sopenharmony_cienum fdsan_error_level fdsan_set_error_level_from_param(enum fdsan_error_level default_level); 267570af302Sopenharmony_ci 268570af302Sopenharmony_ci#include <fortify/stdio.h> 269570af302Sopenharmony_ci 270570af302Sopenharmony_ci#ifdef __cplusplus 271570af302Sopenharmony_ci} 272570af302Sopenharmony_ci#endif 273570af302Sopenharmony_ci 274570af302Sopenharmony_ci#endif 275