diff src/process.c @ 6158:6b81b2575071

Include unistd.h. (pty_max_bytes): New variable. (send_process): Send an eof after each pty_max_bytes bytes.
author Richard M. Stallman <rms@gnu.org>
date Wed, 02 Mar 1994 22:50:31 +0000
parents ffe51baf2728
children d047d5a48e0e
line wrap: on
line diff
--- a/src/process.c	Wed Mar 02 22:05:40 1994 +0000
+++ b/src/process.c	Wed Mar 02 22:50:31 1994 +0000
@@ -38,6 +38,9 @@
 #include <sys/types.h>		/* some typedefs are used in sys/file.h */
 #include <sys/file.h>
 #include <sys/stat.h>
+#ifdef HAVE_UNISTD_H
+#include <unistd.h>
+#endif
 
 #ifdef HAVE_SOCKETS	/* TCP connection support, if kernel can do it */
 #include <sys/socket.h>
@@ -233,6 +236,9 @@
 static int proc_buffered_char[MAXDESC];
 
 static Lisp_Object get_process ();
+
+/* Maximum number of bytes to send to a pty without an eof.  */
+static int pty_max_bytes;
 
 /* Compute the Lisp form of the process status, p->status, from
    the numeric status that was returned by `wait'.  */
@@ -2249,12 +2255,31 @@
       {
 	int this = len;
 	SIGTYPE (*old_sigpipe)();
-
-	/* Don't send more than 500 bytes at a time.  */
-	if (this > 500)
-	  this = 500;
+	int flush_pty = 0;
+
+	if (pty_max_bytes == 0)
+	  {
+#ifdef _PC_MAX_CANON
+	    pty_max_bytes = fpathconf (XFASTINT (XPROCESS (proc)->outfd),
+				       _PC_MAX_CANON);
+#else
+	    pty_max_bytes = 250;
+#endif
+	  }
+
+	/* Don't send more than pty_max_bytes bytes at a time.  */
+	/* Subtract 1 to leave room for the EOF.  */
+	if (this >= pty_max_bytes && XPROCESS (proc)->pty_flag != 0)
+	  this = pty_max_bytes - 1;
+
 	old_sigpipe = (SIGTYPE (*) ()) signal (SIGPIPE, send_process_trap);
 	rv = write (XINT (XPROCESS (proc)->outfd), buf, this);
+
+	/* If we sent just part of the string, put in an EOF
+	   to force it through, before we send the rest.  */
+	if (this < len)
+	  Fprocess_send_eof (proc);
+
 	signal (SIGPIPE, old_sigpipe);
 	if (rv < 0)
 	  {