Loading...
--- /dev/null
+++ Libc/Libc-583/stdio/FreeBSD/makebuf.c.patch
@@ -0,0 +1,44 @@
+--- makebuf.c.orig 2008-08-28 17:18:09.000000000 -0700
++++ makebuf.c 2008-09-04 14:20:48.000000000 -0700
+@@ -49,6 +49,9 @@ __FBSDID("$FreeBSD: src/lib/libc/stdio/m
+ #include "local.h"
+ #include "un-namespace.h"
+
++#define MAXBUFSIZE (1 << 16)
++#define TTYBUFSIZE 4096
++
+ /*
+ * Allocate a file buffer, or switch to unbuffered I/O.
+ * Per the ANSI C standard, ALL tty devices default to line buffered.
+@@ -71,6 +74,12 @@ __smakebuf(fp)
+ return;
+ }
+ flags = __swhatbuf(fp, &size, &couldbetty);
++ if (couldbetty && isatty(fp->_file)) {
++ flags |= __SLBF;
++ /* st_blksize for ttys is 128K, so make it more reasonable */
++ if (size > TTYBUFSIZE)
++ fp->_blksize = size = TTYBUFSIZE;
++ }
+ if ((p = malloc(size)) == NULL) {
+ fp->_flags |= __SNBF;
+ fp->_bf._base = fp->_p = fp->_nbuf;
+@@ -81,8 +90,6 @@ __smakebuf(fp)
+ flags |= __SMBF;
+ fp->_bf._base = fp->_p = p;
+ fp->_bf._size = size;
+- if (couldbetty && isatty(fp->_file))
+- flags |= __SLBF;
+ fp->_flags |= flags;
+ }
+
+@@ -115,8 +122,7 @@ __swhatbuf(fp, bufsize, couldbetty)
+ * __sseek is mainly paranoia.) It is safe to set _blksize
+ * unconditionally; it will only be used if __SOPT is also set.
+ */
+- *bufsize = st.st_blksize;
+- fp->_blksize = st.st_blksize;
++ fp->_blksize = *bufsize = st.st_blksize > MAXBUFSIZE ? MAXBUFSIZE : st.st_blksize;
+ return ((st.st_mode & S_IFMT) == S_IFREG && fp->_seek == __sseek ?
+ __SOPT : __SNPT);
+ }