diff options
Diffstat (limited to 'winsup/cygwin/fhandler_console.cc')
-rw-r--r-- | winsup/cygwin/fhandler_console.cc | 17 |
1 files changed, 13 insertions, 4 deletions
diff --git a/winsup/cygwin/fhandler_console.cc b/winsup/cygwin/fhandler_console.cc index 7ef123784..6e8c76c1c 100644 --- a/winsup/cygwin/fhandler_console.cc +++ b/winsup/cygwin/fhandler_console.cc @@ -178,8 +178,7 @@ fhandler_console::read (void *pv, size_t buflen) case WAIT_OBJECT_0: break; case WAIT_OBJECT_0 + 1: - set_sig_errno (EINTR); - return -1; + goto sig_exit; default: __seterrno (); return -1; @@ -358,8 +357,14 @@ fhandler_console::read (void *pv, size_t buflen) continue; } - if (toadd && line_edit (toadd, nread)) - break; + if (toadd) + { + int res = line_edit (toadd, nread); + if (res < 0) + goto sig_exit; + else if (res) + break; + } #undef ich } @@ -374,6 +379,10 @@ fhandler_console::read (void *pv, size_t buflen) #undef buf return copied_chars; + + sig_exit: + set_sig_errno (EINTR); + return -1; } void |