|
|
1.1 ! root 1: /* @(#)filbuf.c 4.3 (Berkeley) 5/19/81 */ ! 2: #include <stdio.h> ! 3: char *malloc(); ! 4: ! 5: _filbuf(iop) ! 6: register FILE *iop; ! 7: { ! 8: static unsigned char smallbuf[_NFILE]; ! 9: ! 10: if (iop->_flag & _IORW) ! 11: iop->_flag |= _IOREAD; ! 12: ! 13: if ((iop->_flag&_IOREAD) == 0) ! 14: return(EOF); ! 15: if (iop->_flag&_IOSTRG) ! 16: return(EOF); ! 17: tryagain: ! 18: if (iop->_base==NULL) { ! 19: if (iop->_flag&_IONBF) { ! 20: iop->_base = &smallbuf[fileno(iop)]; ! 21: goto tryagain; ! 22: } ! 23: if ((iop->_base = (unsigned char *) malloc(BUFSIZ)) == NULL) { ! 24: iop->_flag |= _IONBF; ! 25: goto tryagain; ! 26: } ! 27: iop->_flag |= _IOMYBUF; ! 28: } ! 29: if (iop == stdin && (stdout->_flag&_IOLBF)) ! 30: fflush(stdout); ! 31: iop->_cnt = read(fileno(iop), iop->_base, iop->_flag&_IONBF?1:BUFSIZ); ! 32: iop->_ptr = iop->_base; ! 33: if (--iop->_cnt < 0) { ! 34: if (iop->_cnt == -1) { ! 35: iop->_flag |= _IOEOF; ! 36: if (iop->_flag & _IORW) ! 37: iop->_flag &= ~_IOREAD; ! 38: } else ! 39: iop->_flag |= _IOERR; ! 40: iop->_cnt = 0; ! 41: return(-1); ! 42: } ! 43: return(*iop->_ptr++); ! 44: }
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.