blob: 90d83961a10a3d011eefa9d73861e215b01804f7 (
plain)
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
|
#include "dietstdio.h"
#include <unistd.h>
extern int feof(FILE *stream);
int fgetc(FILE *stream) {
unsigned char c;
#ifdef WANT_UNGETC
if (stream->ungotten) {
stream->ungotten=0;
return stream->ungetbuf;
}
#endif
if (feof(stream))
return EOF;
#ifdef WANT_BUFFERED_STDIO
if (__fflush4(stream,BUFINPUT)) return EOF;
if (stream->bm>=stream->bs) {
int len=read(stream->fd,stream->buf,BUFSIZE);
if (len==0) {
stream->flags|=EOFINDICATOR;
return EOF;
} else if (len<0) {
stream->flags|=ERRORINDICATOR;
return EOF;
}
stream->bm=0;
stream->bs=len;
}
c=stream->buf[stream->bm];
++stream->bm;
return c;
#else
if (read(stream->fd,&c,1)!=1) {
stream->flags|=ERRORINDICATOR;
return EOF;
}
return c;
#endif
}
|