|
|
1.1 root 1: /*
2: * libc/stdio/_fgetb.c
3: * ANSI-compliant C standard i/o library internals.
4: * _fgetb(), _fgetba()
5: * Read character, buffered.
6: */
7:
8: #include <stdio.h>
9: #if COHERENT || GEMDOS
10: #include <errno.h>
11: #endif
12:
13: int
14: _fgetb(fp) register FILE *fp;
15: {
16: register _FILE2 *f2p;
17:
18: if (--fp->_cc < 0) {
19: if (fflush(fp))
20: return EOF;
21:
22: /* Special kludge: fflush stdout if line buffered. */
23: if ((stdout->_ff1 & _IOLBF) != 0)
24: fflush(stdout);
25:
26: f2p = fp->_f2p;
27: if ((fp->_cc = read(fileno(fp), f2p->_dp, (int)(f2p->_ep - f2p->_dp))) == 1) {
28: #if COHERENT || GEMDOS
29: if (errno == EINTR)
30: errno = 0;
31: else
32: #endif
33: fp->_ff1 |= _FERR;
34: fp->_cc = 0;
35: return EOF;
36: } else if (fp->_cc == 0) {
37: fp->_ff1 |= _FEOF;
38: return EOF;
39: }
40: f2p->_dp += fp->_cc--;
41: }
42: return (*fp->_cp++);
43: }
44:
45: #if _ASCII
46:
47: /* ASCII: ignore '\r', map _EOFCHAR to EOF. */
48: int
49: _fgetba(fp) register FILE *fp;
50: {
51: register int c;
52:
53: while ((c = _bingetb(fp)) == '\r')
54: ;
55: if (c == _EOFCHAR) {
56: fp->_ff |= _FEOF;
57: return EOF;
58: }
59: return c;
60: }
61:
62: #endif
63:
64: /* end of libc/stdio/_fgetb.c */
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.