|
|
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.