# HG changeset patch # User Richard M. Stallman # Date 762648631 0 # Node ID 6b81b25750712a683400b9252e8b5ea695a6472b # Parent 9422e430f06713b07700c8bb858d4b889920d83c Include unistd.h. (pty_max_bytes): New variable. (send_process): Send an eof after each pty_max_bytes bytes. diff -r 9422e430f067 -r 6b81b2575071 src/process.c --- 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 /* some typedefs are used in sys/file.h */ #include #include +#ifdef HAVE_UNISTD_H +#include +#endif #ifdef HAVE_SOCKETS /* TCP connection support, if kernel can do it */ #include @@ -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) {