diff src/callproc.c @ 11619:ff4be652af46

(Fcall_process): Extend BUFFER arg so it can specify a separate output file for stderr output. (Fcall_process_region): Doc fix.
author Richard M. Stallman <rms@gnu.org>
date Sat, 29 Apr 1995 16:47:57 +0000
parents 41e01a3ef4f0
children 6ae23eecab6a
line wrap: on
line diff
--- a/src/callproc.c	Sat Apr 29 16:37:06 1995 +0000
+++ b/src/callproc.c	Sat Apr 29 16:47:57 1995 +0000
@@ -200,7 +200,9 @@
   int fd[2];
   int filefd;
   register int pid;
-  char buf[1024];
+  char buf[16384];
+  char *bufptr = buf;
+  int bufsize = 16384;
   int count = specpdl_ptr - specpdl;
   register unsigned char **new_argv
     = (unsigned char **) alloca ((max (2, nargs - 2)) * sizeof (char *));
@@ -493,8 +495,9 @@
   {
     register int nread;
     int first = 1;
+    int total_read = 0;
 
-    while ((nread = read (fd[0], buf, sizeof buf)) != 0)
+    while ((nread = read (fd[0], bufptr, bufsize)) != 0)
       {
 	if (nread < 0)
 	  {
@@ -505,8 +508,19 @@
 #endif
 	  }
 	immediate_quit = 0;
+	total_read += nread;
+	
 	if (!NILP (buffer))
-	  insert (buf, nread);
+	  insert (bufptr, nread);
+
+	/* Make the buffer bigger as we continue to read more data,
+	   but not past 64k.  */
+	if (bufsize < 64 * 1024 && total_read > 32 * bufsize)
+	  {
+	    bufsize *= 2;
+	    bufptr = (char *) alloca (bufsize);
+	  }
+
 	if (!NILP (display) && INTERACTIVE)
 	  {
 	    if (first)