summaryrefslogtreecommitdiffstats
path: root/winsup/cygwin/fhandler_console.cc
diff options
context:
space:
mode:
Diffstat (limited to 'winsup/cygwin/fhandler_console.cc')
-rw-r--r--winsup/cygwin/fhandler_console.cc17
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