|
|
1.1 ! root 1: /* @(#)filbuf.c 4.6 (Berkeley) 6/30/83 */ ! 2: #include <stdio.h> ! 3: #include <sys/types.h> ! 4: #include <sys/stat.h> ! 5: char *malloc(); ! 6: ! 7: _filbuf(iop) ! 8: register FILE *iop; ! 9: { ! 10: int size; ! 11: struct stat stbuf; ! 12: static char smallbuf[_NFILE]; ! 13: extern char _sibuf[]; ! 14: ! 15: if (iop->_flag & _IORW) ! 16: iop->_flag |= _IOREAD; ! 17: ! 18: if ((iop->_flag&_IOREAD) == 0) ! 19: return(EOF); ! 20: if (iop->_flag&(_IOSTRG|_IOEOF)) ! 21: return(EOF); ! 22: tryagain: ! 23: if (iop->_base==NULL) { ! 24: if (iop->_flag&_IONBF) { ! 25: iop->_base = &smallbuf[fileno(iop)]; ! 26: goto tryagain; ! 27: } ! 28: if (fstat(fileno(iop), &stbuf) < 0 || stbuf.st_blksize <= NULL) ! 29: size = BUFSIZ; ! 30: else ! 31: size = stbuf.st_blksize; ! 32: if (iop == stdin) ! 33: iop->_base = _sibuf; ! 34: else { ! 35: if ((iop->_base = malloc(size)) == NULL) { ! 36: iop->_flag |= _IONBF; ! 37: goto tryagain; ! 38: } ! 39: iop->_flag |= _IOMYBUF; ! 40: } ! 41: iop->_bufsiz = size; ! 42: } ! 43: if (iop == stdin) { ! 44: if (stdout->_flag&_IOLBF) ! 45: fflush(stdout); ! 46: if (stderr->_flag&_IOLBF) ! 47: fflush(stderr); ! 48: } ! 49: iop->_cnt = read(fileno(iop), iop->_base, ! 50: iop->_flag & _IONBF ? 1 : iop->_bufsiz); ! 51: iop->_ptr = iop->_base; ! 52: if (--iop->_cnt < 0) { ! 53: if (iop->_cnt == -1) { ! 54: iop->_flag |= _IOEOF; ! 55: if (iop->_flag & _IORW) ! 56: iop->_flag &= ~_IOREAD; ! 57: } else ! 58: iop->_flag |= _IOERR; ! 59: iop->_cnt = 0; ! 60: return(-1); ! 61: } ! 62: return(*iop->_ptr++&0377); ! 63: }
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.