stdio.h - scc - simple c99 compiler
HTML git clone git://git.simple-cc.org/scc
DIR Log
DIR Files
DIR Refs
DIR Submodules
DIR README
DIR LICENSE
---
stdio.h (4259B)
---
1 #ifndef _STDIO_H
2 #define _STDIO_H
3
4 #define _NEED_NULL
5 #define _NEED_SIZET
6 #define _NEED_VA_LIST
7 #include <sys/stdio.h>
8 #include <arch/cdefs.h>
9
10 #ifndef FOPEN_MAX
11 #define FOPEN_MAX 12
12 #endif
13
14 #define EOF -1
15 #define SEEK_SET 0
16 #define SEEK_CUR 1
17 #define SEEK_END 2
18
19 /**
20 * enum _file_flags - internal FILE macros used by stdio
21 * @_IOWRITE: write only stream
22 * @_IOREAD: read only stream
23 * @_IORW: read and write stream
24 * @_IOEOF: mark of end of file in the stream
25 * @_IOERR: mark of error in the stream
26 * @_IOSTRG: string stream
27 * @_IOTXT: text stream
28 * @_IOFBF: full buffered stream
29 * @_IOLBF: line buffered stream
30 * @_IONBF: non buffered stream
31 * @_IOALLOC: stream with a dynamic allocated buffer
32 */
33 enum _file_flags {
34 _IOWRITE = (1 << 0),
35 _IOREAD = (1 << 1),
36 _IORW = (1 << 2),
37 _IOEOF = (1 << 3),
38 _IOERR = (1 << 4),
39 _IOSTRG = (1 << 5),
40 _IOTXT = (1 << 6),
41 _IOFBF = (1 << 7),
42 _IOLBF = (1 << 8),
43 _IONBF = (1 << 9),
44 _IOALLOC = (1 <<10),
45 };
46
47 /**
48 * struct FILE - opaque structure containing information about a file
49 * @fd: file descriptor
50 * @buf: pointer to i/o buffer
51 * @rp: read pointer
52 * @wp: write pointer
53 * @lp: write pointer used when line-buffering
54 * @len: actual length of buffer
55 * @flags: file open mode
56 * @unbuf: tiny buffer for unbuffered i/o
57 */
58 typedef struct _FILE {
59 int fd;
60 unsigned char *buf;
61 unsigned char *rp;
62 unsigned char *wp;
63 unsigned char *lp;
64 size_t len;
65 unsigned short flags;
66 unsigned char unbuf[1];
67 } FILE;
68
69 extern FILE __iob[FOPEN_MAX];
70
71 #define stdin (&__iob[0])
72 #define stdout (&__iob[1])
73 #define stderr (&__iob[2])
74
75 extern int remove(const char *);
76 extern int rename(const char *, const char *);
77 extern FILE *tmpfile(void);
78 extern char *tmpnam(char *);
79 extern int fclose(FILE *);
80 extern int fflush(FILE *);
81 extern FILE *fopen(const char *restrict, const char *restrict);
82 extern FILE *freopen(const char *restrict, const char *restrict,
83 FILE *restrict);
84 extern void setbuf(FILE *restrict, char *restrict);
85 extern int setvbuf(FILE *restrict, char *restrict, int, size_t);
86 extern int fprintf(FILE *restrict, const char *restrict, ...);
87 extern int fscanf(FILE *restrict, const char *restrict, ...);
88 extern int printf(const char *restrict, ...);
89 extern int scanf(const char *restrict, ...);
90 extern int snprintf(char *restrict, size_t, const char *restrict, ...);
91 extern int sprintf(char *restrict, const char *restrict, ...);
92 extern int sscanf(const char *restrict, const char *restrict, ...);
93
94 extern int vfprintf(FILE *restrict, const char *restrict, __va_list);
95 extern int vfscanf(FILE *restrict, const char *restrict, __va_list);
96 extern int vprintf(const char *restrict, __va_list);
97 extern int vscanf(const char *restrict, __va_list);
98 extern int vsnprintf(char *restrict, size_t, const char *restrict, __va_list);
99 extern int vsprintf(char *restrict, const char *restrict, __va_list);
100 extern int vsscanf(const char *restrict, const char *restrict, __va_list);
101
102 extern int fgetc(FILE *);
103 extern char *fgets(char *restrict, int, FILE *restrict);
104 extern int fputc(int, FILE *);
105 extern int fputs(const char *restrict, FILE *restrict);
106 extern int getc(FILE *);
107 extern int getchar(void);
108 extern char *gets(char *);
109 extern int putc(int, FILE *);
110 extern int putchar(int);
111 extern int puts(const char *);
112 extern int ungetc(int, FILE *);
113 extern size_t fread(void *restrict, size_t, size_t, FILE *restrict);
114 extern size_t fwrite(const void *restrict, size_t, size_t, FILE *restrict);
115 extern int fseek(FILE *, long int, int);
116 extern long int ftell(FILE *);
117 extern void rewind(FILE *);
118 extern void clearerr(FILE *);
119 extern int feof(FILE *);
120 extern int ferror(FILE *);
121 extern void perror(const char *);
122
123 extern int __getc(FILE *);
124 extern int __putc(int, FILE *);
125
126 #define getc(fp) ((fp)->rp >= (fp)->wp ? __getc(fp) : *(fp)->rp++)
127 #define putc(c, fp) ((fp)->wp >= (fp)->rp ? __putc(c,fp) : (*(fp)->wp++ = c))
128 #define ferror(fp) ((fp)->flags & _IOERR)
129 #define feof(fp) ((fp)->flags & _IOEOF)
130 #define clearerr(fp) (void) ((fp)->flags &= ~(_IOERR|_IOEOF))
131 #define getchar() getc(stdin)
132 #define putchar(c) putc((c), stdout)
133 #define setbuf(fp, b) (void) setvbuf(fp, b, b ? _IOFBF:_IONBF, BUFSIZ)
134
135 #endif