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