xref: /original-bsd/lib/libc/stdio/setbuffer.c (revision 542201aa)
1 /*
2  * Copyright (c) 1983 Regents of the University of California.
3  * All rights reserved.  The Berkeley software License Agreement
4  * specifies the terms and conditions for redistribution.
5  */
6 
7 #if defined(LIBC_SCCS) && !defined(lint)
8 static char sccsid[] = "@(#)setbuffer.c	5.2 (Berkeley) 03/09/86";
9 #endif LIBC_SCCS and not lint
10 
11 #include	<stdio.h>
12 
13 setbuffer(iop, buf, size)
14 	register FILE *iop;
15 	char *buf;
16 	int size;
17 {
18 	if (iop->_base != NULL && iop->_flag&_IOMYBUF)
19 		free(iop->_base);
20 	iop->_flag &= ~(_IOMYBUF|_IONBF|_IOLBF);
21 	if ((iop->_base = buf) == NULL) {
22 		iop->_flag |= _IONBF;
23 		iop->_bufsiz = NULL;
24 	} else {
25 		iop->_ptr = iop->_base;
26 		iop->_bufsiz = size;
27 	}
28 	iop->_cnt = 0;
29 }
30 
31 /*
32  * set line buffering for either stdout or stderr
33  */
34 setlinebuf(iop)
35 	register FILE *iop;
36 {
37 	char *buf;
38 	extern char *malloc();
39 
40 	fflush(iop);
41 	setbuffer(iop, NULL, 0);
42 	buf = malloc(BUFSIZ);
43 	if (buf != NULL) {
44 		setbuffer(iop, buf, BUFSIZ);
45 		iop->_flag |= _IOLBF|_IOMYBUF;
46 	}
47 }
48