# HG changeset patch # User Richard M. Stallman # Date 754052773 0 # Node ID 500f269bf0a8dae5d102dc5e12cb4a746604621a # Parent b8731641d26a624c9633386e1576a8e42cb2fd8c (getwd): If getcwd returns 0, we return 0. (getwd for VMS): Likewise. (read_input_waiting): read_socket_hook delivers events, not characters. Make buf smaller in the case where we actually call read itself. diff -r b8731641d26a -r 500f269bf0a8 src/sysdep.c --- a/src/sysdep.c Tue Nov 23 11:03:16 1993 +0000 +++ b/src/sysdep.c Tue Nov 23 11:06:13 1993 +0000 @@ -2093,45 +2093,60 @@ read_input_waiting () { - char buf[256 * BUFFER_SIZE_FACTOR]; struct input_event e; int nread, i; extern int quit_char; if (read_socket_hook) { + struct input_event buf[256]; + read_alarm_should_throw = 0; if (! setjmp (read_alarm_throw)) - nread = (*read_socket_hook) (0, buf, 256 * BUFFER_SIZE_FACTOR, 1, 0); + nread = (*read_socket_hook) (0, buf, 256, 1, 0); else nread = -1; + + /* Scan the chars for C-g and store them in kbd_buffer. */ + for (i = 0; i < nread; i++) + { + kbd_buffer_store_event (&buf[i]); + /* Don't look at input that follows a C-g too closely. + This reduces lossage due to autorepeat on C-g. */ + if (buf[i].kind == ascii_keystroke + && XINT(buf[i].code) == quit_char) + break; + } } else - nread = read (fileno (stdin), buf, 1); - - /* Scan the chars for C-g and store them in kbd_buffer. */ - e.kind = ascii_keystroke; - e.frame_or_window = selected_frame; - e.modifiers = 0; - for (i = 0; i < nread; i++) { - /* Convert chars > 0177 to meta events if desired. - We do this under the same conditions that read_avail_input does. */ - if (read_socket_hook == 0) + char buf[3]; + nread = read (fileno (stdin), buf, 1); + + /* Scan the chars for C-g and store them in kbd_buffer. */ + e.kind = ascii_keystroke; + e.frame_or_window = selected_frame; + 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; + /* Convert chars > 0177 to meta events if desired. + We do this under the same conditions that read_avail_input does. */ + if (read_socket_hook == 0) + { + /* 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. + This reduces lossage due to autorepeat on C-g. */ + if (buf[i] == quit_char) + break; } - - XSET (e.code, Lisp_Int, buf[i]); - kbd_buffer_store_event (&e); - /* Don't look at input that follows a C-g too closely. - This reduces lossage due to autorepeat on C-g. */ - if (buf[i] == quit_char) - break; } } @@ -2734,6 +2749,8 @@ BLOCK_INPUT; /* getcwd uses malloc */ spath = npath = getcwd ((char *) 0, MAXPATHLEN); + if (spath == 0) + return spath; /* On Altos 3068, getcwd can return @hostname/dir, so discard up to first slash. Should be harmless on other systems. */ while (*npath && *npath != '/') @@ -3613,13 +3630,18 @@ getwd (pathname) char *pathname; { - char *ptr; + char *ptr, *val; extern char *getcwd (); #define MAXPATHLEN 1024 ptr = xmalloc (MAXPATHLEN); - getcwd (ptr, MAXPATHLEN); + val = getcwd (ptr, MAXPATHLEN); + if (val == 0) + { + xfree (ptr); + return val; + } strcpy (pathname, ptr); xfree (ptr);