From b95520f5be0a99ed99b0b6edec62b3a8a52d5919 Mon Sep 17 00:00:00 2001 From: Brian Fox Date: Wed, 22 Sep 1993 18:08:51 +0000 Subject: [PATCH] (sys_write): Keep trying to write out the data until all of the data is written, or until we receive an error which is not an interrupted write. --- src/sysdep.c | 30 ++++++++++++++++++++++++++---- 1 file changed, 26 insertions(+), 4 deletions(-) diff --git a/src/sysdep.c b/src/sysdep.c index ba01fe56f67..7778bd862bc 100644 --- a/src/sysdep.c +++ b/src/sysdep.c @@ -2116,6 +2116,12 @@ read_input_waiting () e.modifiers = 0; for (i = 0; i < nread; i++) { + /* If the user says she has a meta key, then believe her. */ + if (meta_key == 1 && (buf[i] & 0x80)) + e.modifiers = meta_modifier; + if (meta_key != 2) + buf[i] &= ~0x80; + XSET (e.code, Lisp_Int, buf[i]); kbd_buffer_store_event (&e); /* Don't look at input that follows a C-g too closely. @@ -2586,11 +2592,27 @@ sys_write (fildes, buf, nbyte) char *buf; unsigned int nbyte; { - register int rtnval; + register int rtnval, bytes_written; - while ((rtnval = write (fildes, buf, nbyte)) == -1 - && (errno == EINTR)); - return (rtnval); + bytes_written = 0; + + while (nbyte > 0) + { + rtnval = write (fildes, buf, nbyte); + + if (rtnval == -1) + { + if (errno == EINTR) + continue; + else + return (-1); + } + + buf += rtnval; + nbyte -= rtnval; + bytes_written += rtnval; + } + return (bytes_written); } #endif /* INTERRUPTIBLE_IO */ -- 2.39.5