ack/lang/cem/libcc/stdio/fillbuf.c
1987-03-31 10:45:53 +00:00

39 lines
790 B
C

/* $Header$ */
#include <stdio.h>
_fillbuf(iop)
register FILE *iop;
{
static unsigned char ch[_NFILES];
iop->_count = 0;
if (fileno(iop) < 0) return EOF;
if ( io_testflag(iop, (IO_EOF | IO_ERR )))
return (EOF);
if ( !io_testflag(iop, IO_READMODE) )
return (EOF);
if (! io_testflag(iop, IO_UNBUFF) && ! iop->_buf) {
iop->_buf = (unsigned char *) malloc(BUFSIZ);
if (! iop->_buf) iop->_flags |= IO_UNBUFF;
else iop->_flags |= IO_MYBUF;
}
if (! iop->_buf) iop->_buf = &ch[fileno(iop)];
iop->_ptr = iop->_buf;
iop->_count = read(iop->_fd, iop->_buf, io_testflag(iop, IO_UNBUFF)? 1 : BUFSIZ);
if (iop->_count <= 0){
if (iop->_count == 0) {
iop->_flags |= IO_EOF;
}
else
iop->_flags |= IO_ERR;
return (EOF);
}
iop->_count--;
return *iop->_ptr++;
}