1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
|
#ifndef __STDIO_H
#define __STDIO_H
#include <features.h>
#include <sys/types.h>
#ifndef SEEK_SET
#define SEEK_SET 0
#define SEEK_CUR 1
#define SEEK_END 2
#endif
#define _IOFBF 0x00 /* full buffering */
#define _IOLBF 0x01 /* line buffering */
#define _IONBF 0x02 /* no buffering */
#define __MODE_BUF 0x03 /* Modal buffering dependent on isatty */
#define __MODE_FREEBUF 0x04 /* Buffer allocated with malloc, can free */
#define __MODE_FREEFIL 0x08 /* FILE allocated with malloc, can free */
#define __MODE_READ 0x10 /* Opened in read only */
#define __MODE_WRITE 0x20 /* Opened in write only */
#define __MODE_RDWR 0x30 /* Opened in read/write */
#define __MODE_READING 0x40 /* Buffer has pending read data */
#define __MODE_WRITING 0x80 /* Buffer has pending write data */
#define __MODE_EOF 0x100 /* EOF status */
#define __MODE_ERR 0x200 /* Error status */
#define __MODE_UNGOT 0x400 /* Buffer has been polluted by ungetc */
#define __MODE_IOTRAN 0
/* when you add or change fields here, be sure to change the initialization
* in stdio_init and fopen */
struct __stdio_file {
unsigned char *bufpos; /* the next byte to write to or read from */
unsigned char *bufread; /* the end of data returned by last read() */
unsigned char *bufwrite; /* highest address writable by macro */
unsigned char *bufstart; /* the start of the buffer */
unsigned char *bufend; /* the end of the buffer; ie the byte after the last
malloc()ed byte */
int fd; /* the file descriptor associated with the stream */
int mode;
char unbuf[8]; /* The buffer for 'unbuffered' streams */
struct __stdio_file * next;
};
#define EOF (-1)
#ifndef NULL
#define NULL (0)
#endif
typedef struct __stdio_file FILE;
#define BUFSIZ (500) /*(508) should get us a fully used kmalloc bucket */
extern FILE stdin[1];
extern FILE stdout[1];
extern FILE stderr[1];
#define putc(c, stream) \
(((stream)->bufpos >= (stream)->bufwrite) ? fputc((c), (stream)) \
: (unsigned char) (*(stream)->bufpos++ = (c)) )
#define getc(stream) \
(((stream)->bufpos >= (stream)->bufread) ? fgetc(stream): \
(*(stream)->bufpos++))
#define putchar(c) putc((c), stdout)
#define getchar() getc(stdin)
#define ferror(fp) (((fp)->mode&__MODE_ERR) != 0)
#define feof(fp) (((fp)->mode&__MODE_EOF) != 0)
#define clearerr(fp) ((fp)->mode &= ~(__MODE_EOF|__MODE_ERR),0)
#define fileno(fp) ((fp)->fd)
/* These two call malloc */
#define setlinebuf(__fp) setvbuf((__fp), (char*)0, _IOLBF, 0)
extern int setvbuf __P((FILE*, char*, int, size_t));
/* These don't */
#define setbuf(__fp, __buf) setbuffer((__fp), (__buf), BUFSIZ)
extern void setbuffer __P((FILE*, char*, int));
extern int fgetc __P((FILE*));
extern int fputc __P((int, FILE*));
extern int fclose __P((FILE*));
extern int fflush __P((FILE*));
extern char *fgets __P((char*, size_t, FILE*));
extern FILE *__fopen __P((char*, int, FILE*, char*));
#define fopen(__file, __mode) __fopen((__file), -1, (FILE*)0, (__mode))
#define freopen(__file, __mode, __fp) __fopen((__file), -1, (__fp), (__mode))
#define fdopen(__file, __mode) __fopen((char*)0, (__file), (FILE*)0, (__mode))
extern int fseek __P((FILE*, long, int));
extern long ftell __P((FILE*));
extern void rewind __P((FILE*));
extern int fputs __P((char*, FILE*));
extern int puts __P((char*));
extern int printf __P ((__const char*, ...));
extern int fprintf __P ((FILE*, __const char*, ...));
extern int sprintf __P ((char*, __const char*, ...));
extern int ungetc __P ((int c, FILE * stream));
#define stdio_pending(fp) ((fp)->bufread>(fp)->bufpos)
#endif /* __STDIO_H */
|