don't do 1 byte writes, buffer and flush unbuffered I/O (stderr).
[unix-history] / usr / src / lib / libc / stdio / setbuffer.c
CommitLineData
d5c54585 1/* @(#)setbuffer.c 4.2 (Berkeley) %G% */
30b0fd94
KM
2#include <stdio.h>
3
4setbuffer(iop, buf, size)
5 register struct _iobuf *iop;
6 char *buf;
7 int size;
8{
9 if (iop->_base != NULL && iop->_flag&_IOMYBUF)
10 free(iop->_base);
11 iop->_flag &= ~(_IOMYBUF|_IONBF|_IOLBF);
12 if ((iop->_base = buf) == NULL) {
13 iop->_flag |= _IONBF;
14 iop->_bufsiz = NULL;
15 } else {
16 iop->_ptr = iop->_base;
17 iop->_bufsiz = size;
18 }
19 iop->_cnt = 0;
20}
d5c54585
KM
21
22/*
23 * set line buffering for either stdout or stderr
24 */
25setlinebuf(iop)
26 register struct _iobuf *iop;
27{
28 static char _sebuf[BUFSIZ];
29 extern char _sobuf[];
30
31 if (iop != stdout && iop != stderr)
32 return;
33 fflush(iop);
34 setbuffer(iop, NULL, 0);
35 setbuffer(iop, iop == stderr ? _sebuf : _sobuf, BUFSIZ);
36 iop->_flag |= _IOLBF;
37}