1*27989a8eSAntonio Nino Diaz /* 2*27989a8eSAntonio Nino Diaz * Copyright (c) 2012-2017 Roberto E. Vargas Caballero 3*27989a8eSAntonio Nino Diaz * 4*27989a8eSAntonio Nino Diaz * SPDX-License-Identifier: BSD-3-Clause 5*27989a8eSAntonio Nino Diaz */ 6*27989a8eSAntonio Nino Diaz 7*27989a8eSAntonio Nino Diaz #ifndef _STDIO_H 8*27989a8eSAntonio Nino Diaz #define _STDIO_H 9*27989a8eSAntonio Nino Diaz 10*27989a8eSAntonio Nino Diaz #include <arch/stdio.h> 11*27989a8eSAntonio Nino Diaz 12*27989a8eSAntonio Nino Diaz #ifndef FOPEN_MAX 13*27989a8eSAntonio Nino Diaz #define FOPEN_MAX 12 14*27989a8eSAntonio Nino Diaz #endif 15*27989a8eSAntonio Nino Diaz 16*27989a8eSAntonio Nino Diaz #ifndef NULL 17*27989a8eSAntonio Nino Diaz #define NULL ((void *) 0) 18*27989a8eSAntonio Nino Diaz #endif 19*27989a8eSAntonio Nino Diaz 20*27989a8eSAntonio Nino Diaz #define EOF -1 21*27989a8eSAntonio Nino Diaz #define SEEK_CUR 0 22*27989a8eSAntonio Nino Diaz #define SEEK_END 1 23*27989a8eSAntonio Nino Diaz #define SEEK_SET 2 24*27989a8eSAntonio Nino Diaz 25*27989a8eSAntonio Nino Diaz 26*27989a8eSAntonio Nino Diaz #define _IOWRITE (1 << 0) 27*27989a8eSAntonio Nino Diaz #define _IOREAD (1 << 1) 28*27989a8eSAntonio Nino Diaz #define _IORW (1 << 2) 29*27989a8eSAntonio Nino Diaz #define _IOEOF (1 << 3) 30*27989a8eSAntonio Nino Diaz #define _IOERR (1 << 4) 31*27989a8eSAntonio Nino Diaz #define _IOSTRG (1 << 5) 32*27989a8eSAntonio Nino Diaz #define _IOTXT (1 << 6) 33*27989a8eSAntonio Nino Diaz #define _IOFBF (1 << 7) 34*27989a8eSAntonio Nino Diaz #define _IOLBF (1 << 8) 35*27989a8eSAntonio Nino Diaz #define _IONBF (1 << 9) 36*27989a8eSAntonio Nino Diaz #define _IOALLOC (1 <<10) 37*27989a8eSAntonio Nino Diaz 38*27989a8eSAntonio Nino Diaz typedef struct { 39*27989a8eSAntonio Nino Diaz int fd; /* file descriptor */ 40*27989a8eSAntonio Nino Diaz unsigned char *buf; /* pointer to i/o buffer */ 41*27989a8eSAntonio Nino Diaz unsigned char *rp; /* read pointer */ 42*27989a8eSAntonio Nino Diaz unsigned char *wp; /* write pointer */ 43*27989a8eSAntonio Nino Diaz unsigned char *lp; /* write pointer used when line-buffering */ 44*27989a8eSAntonio Nino Diaz size_t len; /* actual length of buffer */ 45*27989a8eSAntonio Nino Diaz unsigned short flags; 46*27989a8eSAntonio Nino Diaz unsigned char unbuf[1]; /* tiny buffer for unbuffered io */ 47*27989a8eSAntonio Nino Diaz } FILE; 48*27989a8eSAntonio Nino Diaz 49*27989a8eSAntonio Nino Diaz extern FILE __iob[FOPEN_MAX]; 50*27989a8eSAntonio Nino Diaz 51*27989a8eSAntonio Nino Diaz #define stdin (&__iob[0]) 52*27989a8eSAntonio Nino Diaz #define stdout (&__iob[1]) 53*27989a8eSAntonio Nino Diaz #define stderr (&__iob[2]) 54*27989a8eSAntonio Nino Diaz 55*27989a8eSAntonio Nino Diaz extern int remove(const char *filename); 56*27989a8eSAntonio Nino Diaz extern int rename(const char *old, const char *new); 57*27989a8eSAntonio Nino Diaz extern FILE *tmpfile(void); 58*27989a8eSAntonio Nino Diaz extern char *tmpnam(char *s); 59*27989a8eSAntonio Nino Diaz extern int fclose(FILE *fp); 60*27989a8eSAntonio Nino Diaz extern int fflush(FILE *fp); 61*27989a8eSAntonio Nino Diaz extern FILE *fopen(const char * restrict fname, const char * restrict mode); 62*27989a8eSAntonio Nino Diaz extern FILE *freopen(const char * restrict fname, const char * restrict mode, 63*27989a8eSAntonio Nino Diaz FILE * restrict fp); 64*27989a8eSAntonio Nino Diaz extern void setbuf(FILE * restrict fp, char * restrict buf); 65*27989a8eSAntonio Nino Diaz extern int setvbuf(FILE * restrict fp, 66*27989a8eSAntonio Nino Diaz char * restrict buf, int mode, size_t size); 67*27989a8eSAntonio Nino Diaz extern int fprintf(FILE * restrict fp, const char * restrict fmt, ...); 68*27989a8eSAntonio Nino Diaz extern int fscanf(FILE * restrict fp, const char * restrict fmt, ...); 69*27989a8eSAntonio Nino Diaz extern int printf(const char * restrict fmt, ...); 70*27989a8eSAntonio Nino Diaz extern int scanf(const char * restrict fmt, ...); 71*27989a8eSAntonio Nino Diaz extern int snprintf(char * restrict s, 72*27989a8eSAntonio Nino Diaz size_t n, const char * restrict fmt, ...); 73*27989a8eSAntonio Nino Diaz extern int sprintf(char * restrict s, const char * restrict fmt, ...); 74*27989a8eSAntonio Nino Diaz extern int sscanf(const char * restrict s, const char * restrict fmt, ...); 75*27989a8eSAntonio Nino Diaz 76*27989a8eSAntonio Nino Diaz #ifdef _STDARG_H 77*27989a8eSAntonio Nino Diaz extern int vfprintf(FILE * restrict fp, 78*27989a8eSAntonio Nino Diaz const char * restrict fmt, va_list arg); 79*27989a8eSAntonio Nino Diaz extern int vfscanf(FILE * restrict fp, 80*27989a8eSAntonio Nino Diaz const char * restrict fmt, va_list arg); 81*27989a8eSAntonio Nino Diaz extern int vprintf(const char * restrict fmt, va_list arg); 82*27989a8eSAntonio Nino Diaz extern int vscanf(const char * restrict fmt, va_list arg); 83*27989a8eSAntonio Nino Diaz extern int vsnprintf(char * restrict s, size_t n, const char * restrict fmt, 84*27989a8eSAntonio Nino Diaz va_list arg); 85*27989a8eSAntonio Nino Diaz extern int vsprintf(char * restrict s, 86*27989a8eSAntonio Nino Diaz const char * restrict fmt, va_list arg); 87*27989a8eSAntonio Nino Diaz extern int vsscanf(const char * restrict s, 88*27989a8eSAntonio Nino Diaz const char * restrict fmt, va_list arg); 89*27989a8eSAntonio Nino Diaz #endif 90*27989a8eSAntonio Nino Diaz 91*27989a8eSAntonio Nino Diaz extern int fgetc(FILE *fp); 92*27989a8eSAntonio Nino Diaz extern char *fgets(char * restrict s, int n, FILE * restrict fp); 93*27989a8eSAntonio Nino Diaz extern int fputc(int c, FILE *fp); 94*27989a8eSAntonio Nino Diaz extern int fputs(const char * restrict s, FILE * restrict fp); 95*27989a8eSAntonio Nino Diaz extern int getc(FILE *fp); 96*27989a8eSAntonio Nino Diaz extern int getchar(void); 97*27989a8eSAntonio Nino Diaz extern char *gets(char *s); 98*27989a8eSAntonio Nino Diaz extern int putc(int c, FILE *fp); 99*27989a8eSAntonio Nino Diaz extern int putchar(int c); 100*27989a8eSAntonio Nino Diaz extern int puts(const char *s); 101*27989a8eSAntonio Nino Diaz extern int ungetc(int c, FILE *fp); 102*27989a8eSAntonio Nino Diaz extern size_t fread(void * restrict ptr, size_t size, size_t nmemb, 103*27989a8eSAntonio Nino Diaz FILE * restrict fp); 104*27989a8eSAntonio Nino Diaz extern size_t fwrite(const void * restrict ptr, size_t size, size_t nmemb, 105*27989a8eSAntonio Nino Diaz FILE * restrict fp); 106*27989a8eSAntonio Nino Diaz extern int fgetpos(FILE * restrict fp, fpos_t * restrict pos); 107*27989a8eSAntonio Nino Diaz extern int fseek(FILE *fp, long int offset, int whence); 108*27989a8eSAntonio Nino Diaz extern int fsetpos(FILE *fp, const fpos_t *pos); 109*27989a8eSAntonio Nino Diaz extern long int ftell(FILE *fp); 110*27989a8eSAntonio Nino Diaz extern void rewind(FILE *fp); 111*27989a8eSAntonio Nino Diaz extern void clearerr(FILE *fp); 112*27989a8eSAntonio Nino Diaz extern int feof(FILE *fp); 113*27989a8eSAntonio Nino Diaz extern int ferror(FILE *fp); 114*27989a8eSAntonio Nino Diaz extern void perror(const char *s); 115*27989a8eSAntonio Nino Diaz 116*27989a8eSAntonio Nino Diaz extern int __getc(FILE *fp); 117*27989a8eSAntonio Nino Diaz extern int __putc(int, FILE *fp); 118*27989a8eSAntonio Nino Diaz 119*27989a8eSAntonio Nino Diaz #ifdef __USE_MACROS 120*27989a8eSAntonio Nino Diaz #ifdef __UNIX_FILES 121*27989a8eSAntonio Nino Diaz #define getc(fp) ((fp)->rp >= (fp)->wp ? __getc(fp) : *(fp)->rp++) 122*27989a8eSAntonio Nino Diaz #define putc(c, fp) ((fp)->wp >= (fp)->rp ? __putc(c,fp) : (*(fp)->wp++ = c)) 123*27989a8eSAntonio Nino Diaz #endif 124*27989a8eSAntonio Nino Diaz 125*27989a8eSAntonio Nino Diaz #define ferror(fp) ((fp)->flags & _IOERR) 126*27989a8eSAntonio Nino Diaz #define feof(fp) ((fp)->flags & _IOEOF) 127*27989a8eSAntonio Nino Diaz #define clearerr(fp) (void) ((fp)->flags &= ~(_IOERR|_IOEOF)) 128*27989a8eSAntonio Nino Diaz #define getchar() getc(stdin) 129*27989a8eSAntonio Nino Diaz #define putchar(c) putc((c), stdout) 130*27989a8eSAntonio Nino Diaz #define setbuf(fp, b) (void) setvbuf(fp, b, b ? _IOFBF:_IONBF, BUFSIZ) 131*27989a8eSAntonio Nino Diaz #endif 132*27989a8eSAntonio Nino Diaz 133*27989a8eSAntonio Nino Diaz #endif 134