xref: /csrg-svn/lib/libc/stdio/setbuffer.c (revision 11307)
1*11307Smckusick /* @(#)setbuffer.c	4.2 (Berkeley) 02/27/83 */
28327Smckusick #include	<stdio.h>
38327Smckusick 
48327Smckusick setbuffer(iop, buf, size)
58327Smckusick 	register struct _iobuf *iop;
68327Smckusick 	char *buf;
78327Smckusick 	int size;
88327Smckusick {
98327Smckusick 	if (iop->_base != NULL && iop->_flag&_IOMYBUF)
108327Smckusick 		free(iop->_base);
118327Smckusick 	iop->_flag &= ~(_IOMYBUF|_IONBF|_IOLBF);
128327Smckusick 	if ((iop->_base = buf) == NULL) {
138327Smckusick 		iop->_flag |= _IONBF;
148327Smckusick 		iop->_bufsiz = NULL;
158327Smckusick 	} else {
168327Smckusick 		iop->_ptr = iop->_base;
178327Smckusick 		iop->_bufsiz = size;
188327Smckusick 	}
198327Smckusick 	iop->_cnt = 0;
208327Smckusick }
21*11307Smckusick 
22*11307Smckusick /*
23*11307Smckusick  * set line buffering for either stdout or stderr
24*11307Smckusick  */
25*11307Smckusick setlinebuf(iop)
26*11307Smckusick 	register struct _iobuf *iop;
27*11307Smckusick {
28*11307Smckusick 	static char _sebuf[BUFSIZ];
29*11307Smckusick 	extern char _sobuf[];
30*11307Smckusick 
31*11307Smckusick 	if (iop != stdout && iop != stderr)
32*11307Smckusick 		return;
33*11307Smckusick 	fflush(iop);
34*11307Smckusick 	setbuffer(iop, NULL, 0);
35*11307Smckusick 	setbuffer(iop, iop == stderr ? _sebuf : _sobuf, BUFSIZ);
36*11307Smckusick 	iop->_flag |= _IOLBF;
37*11307Smckusick }
38