#ifndef SYSROOT_STDIO_H_
#define SYSROOT_STDIO_H_

#ifdef __cplusplus
extern "C" {
#endif

#include <features.h>

#define __printflike(__fmt, __varargs) __attribute__((__format__(__printf__, __fmt, __varargs)))
#define __scanflike(__fmt, __varargs) __attribute__((__format__(__scanf__, __fmt, __varargs)))

#define __NEED_FILE
#define __NEED___isoc_va_list
#define __NEED_size_t

#if defined(_POSIX_SOURCE) || defined(_POSIX_C_SOURCE) || defined(_XOPEN_SOURCE) || \
    defined(_GNU_SOURCE) || defined(_BSD_SOURCE)
#define __NEED_ssize_t
#define __NEED_off_t
#define __NEED_va_list
#endif

#include <bits/alltypes.h>
#include <bits/null.h>

#undef EOF
#define EOF (-1)

#undef SEEK_SET
#undef SEEK_CUR
#undef SEEK_END
#define SEEK_SET 0
#define SEEK_CUR 1
#define SEEK_END 2

#define _IOFBF 0
#define _IOLBF 1
#define _IONBF 2

#define BUFSIZ 1024
#define FILENAME_MAX 4096
#define FOPEN_MAX 1000
#define TMP_MAX 10000
#define L_tmpnam 20

typedef union _G_fpos64_t {
  char __opaque[16];
  double __align;
} fpos_t;

extern FILE* const stdin;
extern FILE* const stdout;
extern FILE* const stderr;

#define stdin (stdin)
#define stdout (stdout)
#define stderr (stderr)

FILE* fopen(const char* __restrict, const char* __restrict);
FILE* freopen(const char* __restrict, const char* __restrict, FILE* __restrict);
int fclose(FILE*);

int remove(const char*);
int rename(const char*, const char*);

int feof(FILE*);
int ferror(FILE*);
int fflush(FILE*);
void clearerr(FILE*);

int fseek(FILE*, long, int);
long ftell(FILE*);
void rewind(FILE*);

int fgetpos(FILE* __restrict, fpos_t* __restrict);
int fsetpos(FILE*, const fpos_t*);

size_t fread(void* __restrict, size_t, size_t, FILE* __restrict);
size_t fwrite(const void* __restrict, size_t, size_t, FILE* __restrict);

int fgetc(FILE*);
int getc(FILE*);
int getchar(void);
int ungetc(int, FILE*);

int fputc(int, FILE*);
int putc(int, FILE*);
int putchar(int);

char* fgets(char* __restrict, int, FILE* __restrict);
#if __STDC_VERSION__ < 201112L
char* gets(char*);
#endif

int fputs(const char* __restrict, FILE* __restrict);
int puts(const char*);

int printf(const char* __restrict, ...) __printflike(1, 2);
int fprintf(FILE* __restrict, const char* __restrict, ...) __printflike(2, 3);
int sprintf(char* __restrict, const char* __restrict, ...) __printflike(2, 3);
int snprintf(char* __restrict, size_t, const char* __restrict, ...) __printflike(3, 4);

int vprintf(const char* __restrict, __isoc_va_list) __printflike(1, 0);
int vfprintf(FILE* __restrict, const char* __restrict, __isoc_va_list) __printflike(2, 0);
int vsprintf(char* __restrict, const char* __restrict, __isoc_va_list) __printflike(2, 0);
int vsnprintf(char* __restrict, size_t, const char* __restrict, __isoc_va_list) __printflike(3, 0);

int scanf(const char* __restrict, ...) __scanflike(1, 2);
int fscanf(FILE* __restrict, const char* __restrict, ...) __scanflike(2, 3);
int sscanf(const char* __restrict, const char* __restrict, ...) __scanflike(2, 3);
int vscanf(const char* __restrict, __isoc_va_list) __scanflike(1, 0);
int vfscanf(FILE* __restrict, const char* __restrict, __isoc_va_list) __scanflike(2, 0);
int vsscanf(const char* __restrict, const char* __restrict, __isoc_va_list) __scanflike(2, 0);

void perror(const char*);

int setvbuf(FILE* __restrict, char* __restrict, int, size_t);
void setbuf(FILE* __restrict, char* __restrict);

char* tmpnam(char*);
FILE* tmpfile(void);

#if defined(_POSIX_SOURCE) || defined(_POSIX_C_SOURCE) || defined(_XOPEN_SOURCE) || \
    defined(_GNU_SOURCE) || defined(_BSD_SOURCE)
FILE* fmemopen(void* __restrict, size_t, const char* __restrict);
FILE* open_memstream(char**, size_t*);
FILE* fdopen(int, const char*);
FILE* popen(const char*, const char*);
int pclose(FILE*);
int fileno(FILE*);
int fseeko(FILE*, off_t, int);
off_t ftello(FILE*);
int dprintf(int, const char* __restrict, ...) __printflike(2, 3);
int vdprintf(int, const char* __restrict, __isoc_va_list) __printflike(2, 0);
void flockfile(FILE*);
int ftrylockfile(FILE*);
void funlockfile(FILE*);
int getc_unlocked(FILE*);
int getchar_unlocked(void);
int putc_unlocked(int, FILE*);
int putchar_unlocked(int);
ssize_t getdelim(char** __restrict, size_t* __restrict, int, FILE* __restrict);
ssize_t getline(char** __restrict, size_t* __restrict, FILE* __restrict);
int renameat(int, const char*, int, const char*);
char* ctermid(char*);
#define L_ctermid 20
#endif

#if defined(_XOPEN_SOURCE) || defined(_GNU_SOURCE) || defined(_BSD_SOURCE)
#define P_tmpdir "/tmp"
char* tempnam(const char*, const char*);
#endif

#if defined(_GNU_SOURCE) || defined(_BSD_SOURCE)
#define L_cuserid 20
char* cuserid(char*);
void setlinebuf(FILE*);
void setbuffer(FILE*, char*, size_t);
int fgetc_unlocked(FILE*);
int fputc_unlocked(int, FILE*);
int fflush_unlocked(FILE*);
size_t fread_unlocked(void*, size_t, size_t, FILE*);
size_t fwrite_unlocked(const void*, size_t, size_t, FILE*);
void clearerr_unlocked(FILE*);
int feof_unlocked(FILE*);
int ferror_unlocked(FILE*);
int fileno_unlocked(FILE*);
int getw(FILE*);
int putw(int, FILE*);
char* fgetln(FILE*, size_t*);
int asprintf(char**, const char*, ...) __printflike(2, 3);
int vasprintf(char**, const char*, __isoc_va_list) __printflike(2, 0);
#endif

#ifdef _GNU_SOURCE
char* fgets_unlocked(char*, int, FILE*);
int fputs_unlocked(const char*, FILE*);
#endif

#ifdef __cplusplus
}
#endif

#endif  // SYSROOT_STDIO_H_
