1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465 |
- /* $Id$ */
- #include <stdio.h>
- int
- _flushbuf(c, iop)
- register FILE *iop;
- {
- if (fileno(iop) < 0) return EOF;
- if (! io_testflag(iop, IO_UNBUFF)) {
- if (iop->_buf == 0) {
- if (iop == stdout && isatty(fileno(stdout))) {
- iop->_flags |= IO_UNBUFF;
- }
- else {
- extern char *malloc();
-
- if (!(iop->_buf = (unsigned char *) malloc(_BUFSIZ))) {
- iop->_flags |= IO_UNBUFF;
- }
- else {
- iop->_flags |= IO_MYBUF;
- iop->_bufsiz = _BUFSIZ;
- iop->_count = _BUFSIZ-1;
- }
- }
- iop->_ptr = iop->_buf;
- }
- }
- if (io_testflag(iop, IO_UNBUFF)) {
- char c1 = c;
- iop->_count = 0;
- if (write(fileno(iop), &c1, 1) != 1) {
- iop->_flags |= IO_ERR;
- return EOF;
- }
- return c;
- }
- else {
- int count = iop->_ptr - iop->_buf;
- iop->_count = iop->_bufsiz - 1;
- iop->_ptr = iop->_buf + 1;
- if (count > 0) {
- if (write(fileno(iop), iop->_buf, count) != count) {
- *(iop->_buf) = c;
- iop->_flags |= IO_ERR;
- return EOF;
- }
- }
- *(iop->_buf) = c;
- }
- return c;
- }
- _cleanup()
- {
- register int i;
- for ( i = 0 ; i < _NFILES ; i++ )
- if ( _io_table[i] != NULL )
- fclose(_io_table[i]);
- }
|