diff --git a/builtins/read.def b/builtins/read.def index 47715512..d07b6cbf 100644 --- a/builtins/read.def +++ b/builtins/read.def @@ -112,6 +112,8 @@ $END extern int errno; #endif +#include "execute_cmd.h" + struct ttsave { int fd; @@ -606,11 +608,11 @@ read_builtin (list) CHECK_ALRM; errno = 0; if (unbuffered_read == 2) - retval = posixly_correct ? zreadintr (fd, &c, 1) : zreadn (fd, &c, nchars - nr); + retval = zreadintr (fd, &c, 1); else if (unbuffered_read) - retval = posixly_correct ? zreadintr (fd, &c, 1) : zread (fd, &c, 1); + retval = zreadintr (fd, &c, 1); else - retval = posixly_correct ? zreadcintr (fd, &c) : zreadc (fd, &c); + retval = zreadcintr (fd, &c); reading = 0; if (retval <= 0) @@ -624,6 +626,7 @@ read_builtin (list) lastsig = LASTSIG(); if (lastsig == 0) lastsig = trapped_signal_received; + last_command_exit_value = 128|lastsig; run_pending_traps (); /* because interrupt_immediately is not set */ } else