xref: /csrg-svn/lib/libc/stdio/setbuffer.c (revision 11307)
1 /* @(#)setbuffer.c	4.2 (Berkeley) 02/27/83 */
2 #include	<stdio.h>
3 
4 setbuffer(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 }
21 
22 /*
23  * set line buffering for either stdout or stderr
24  */
25 setlinebuf(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 }
38