Annotation of 3BSD/lib/libNS/filbuf.c, revision 1.1.1.1

1.1       root        1: /* Copyright (c) 1979 Regents of the University of California */
                      2: #include       <stdio.h>
                      3: _filbuf(iop)
                      4: register struct _iobuf *iop;
                      5: {
                      6:        static char smallbuf[_NFILE];
                      7:        register n;
                      8:        char *malloc();
                      9: 
                     10:        if ((iop->_flag&_IOREAD) == 0)
                     11:                _error("Reading bad file\n");
                     12:        if (iop->_flag&_IOSTRG)
                     13:                return(-1);
                     14: tryagain:
                     15:        if (iop->_base==NULL) {
                     16:                if (iop->_flag&_IONBF) {
                     17:                        iop->_base = &smallbuf[fileno(iop)];
                     18:                        goto tryagain;
                     19:                }
                     20:                if ((iop->_base = malloc(BUFSIZ)) == NULL) {
                     21:                        iop->_flag |= _IONBF;
                     22:                        goto tryagain;
                     23:                }
                     24:                iop->_flag |= _IOMYBUF;
                     25:        }
                     26:        if((iop->_flag & _IODIRT) && !(iop->_flag & _IONBF) && (iop->_flag & _IOWRT)) {
                     27:                if (iop->_delta)
                     28:                        if (lseek(iop->_file,(long)  -iop->_delta, 1) < 0) {
                     29:                                _error("Seek error in filbuf\n");
                     30:                                iop->_flag |= _IOERR;
                     31:                        }
                     32:                if( 0 < (n = iop->_ptr - iop->_base))
                     33:                        if( n != write(iop->_file, iop->_base, n) )
                     34:                                iop->_flag |= _IOERR;
                     35:                iop->_flag &= ~_IODIRT;
                     36:        }
                     37:        iop->_ptr = iop->_base;
                     38:        iop->_cnt = read(fileno(iop), iop->_ptr, iop->_flag&_IONBF?1:BUFSIZ);
                     39:        iop->_delta = iop->_cnt;
                     40:        if (--iop->_cnt < 0) {
                     41:                if (iop->_cnt == -1)
                     42:                        iop->_flag |= _IOEOF;
                     43:                else
                     44:                        iop->_flag |= _IOERR;
                     45:                iop->_cnt = 0;
                     46:                return(-1);
                     47:        }
                     48:        return(*iop->_ptr++&0377);
                     49: }

unix.superglobalmegacorp.com

This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.