one too many levels of indirection (from ks@purdue)
[unix-history] / usr / src / lib / libc / stdio / setbuffer.c
index 8ed655c..b1b1601 100644 (file)
@@ -1,8 +1,17 @@
-/* @(#)setbuffer.c     4.2 (Berkeley) %G% */
+/*
+ * Copyright (c) 1983 Regents of the University of California.
+ * All rights reserved.  The Berkeley software License Agreement
+ * specifies the terms and conditions for redistribution.
+ */
+
+#ifndef lint
+static char sccsid[] = "@(#)setbuffer.c        5.1 (Berkeley) %G%";
+#endif not lint
+
 #include       <stdio.h>
 
 setbuffer(iop, buf, size)
 #include       <stdio.h>
 
 setbuffer(iop, buf, size)
-       register struct _iobuf *iop;
+       register FILE *iop;
        char *buf;
        int size;
 {
        char *buf;
        int size;
 {
@@ -23,15 +32,16 @@ setbuffer(iop, buf, size)
  * set line buffering for either stdout or stderr
  */
 setlinebuf(iop)
  * set line buffering for either stdout or stderr
  */
 setlinebuf(iop)
-       register struct _iobuf *iop;
+       register FILE *iop;
 {
 {
-       static char _sebuf[BUFSIZ];
-       extern char _sobuf[];
+       char *buf;
+       extern char *malloc();
 
 
-       if (iop != stdout && iop != stderr)
-               return;
        fflush(iop);
        setbuffer(iop, NULL, 0);
        fflush(iop);
        setbuffer(iop, NULL, 0);
-       setbuffer(iop, iop == stderr ? _sebuf : _sobuf, BUFSIZ);
-       iop->_flag |= _IOLBF;
+       buf = malloc(BUFSIZ);
+       if (buf != NULL) {
+               setbuffer(iop, buf, BUFSIZ);
+               iop->_flag |= _IOLBF|_IOMYBUF;
+       }
 }
 }