Mercurial > emacs
changeset 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 | 9422e430f067 |
children | 78275962ef1e |
files | src/process.c |
diffstat | 1 files changed, 29 insertions(+), 4 deletions(-) [+] |
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) {