|
|
1.1 root 1: /*
2: * libc/stdio/_fgetc.c
3: * C Standard I/O Library internals.
4: * Unbuffered input.
5: */
6:
7: #include <stdio.h>
8: #include <errno.h>
9:
10: extern int _fputt();
11:
12: int
13: _fgetc(fp) register FILE *fp;
14: {
15: register unsigned char s[1];
16: register int n, oerrno;
17:
18: if (stdout->_pt==&_fputt) /* special kludge */
19: fflush(stdout);
20: fp->_cc = 0;
21: oerrno = errno; /* save old errno */
22: errno = 0;
23: n = EOF; /* return value in case error */
24: switch (read(fileno(fp), s, 1)) {
25: case -1: /* error */
26: if (errno != EINTR)
27: fp->_ff |= _FERR;
28: break;
29: case 0: /* EOF */
30: fp->_ff |= _FEOF;
31: break;
32: default: /* success */
33: n = s[0];
34: break;
35: }
36: if (errno == 0)
37: errno = oerrno; /* preserve errno if no error */
38: return n;
39: }
40:
41: /* end of libc/stdio/_fgetc.c */
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.