hush: make read builtin interruptible.
function old new delta builtin_read 185 471 +286 check_and_run_traps 200 262 +62 nonblock_immune_read 73 119 +46 sigismember - 44 +44 record_signal - 21 +21 sigisemptyset - 16 +16 ... ------------------------------------------------------------------------------ (add/remove: 5/0 grow/shrink: 7/5 up/down: 483/-46) Total: 437 bytes Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
This commit is contained in:
@ -5918,7 +5918,7 @@ expbackq(union node *cmd, int quoted, int quotes)
|
||||
read:
|
||||
if (in.fd < 0)
|
||||
break;
|
||||
i = nonblock_immune_read(in.fd, buf, sizeof(buf));
|
||||
i = nonblock_immune_read(in.fd, buf, sizeof(buf), /*loop_on_EINTR:*/ 1);
|
||||
TRACE(("expbackq: read returns %d\n", i));
|
||||
if (i <= 0)
|
||||
break;
|
||||
@ -9617,7 +9617,7 @@ preadfd(void)
|
||||
#if ENABLE_FEATURE_EDITING
|
||||
retry:
|
||||
if (!iflag || g_parsefile->pf_fd != STDIN_FILENO)
|
||||
nr = nonblock_immune_read(g_parsefile->pf_fd, buf, IBUFSIZ - 1);
|
||||
nr = nonblock_immune_read(g_parsefile->pf_fd, buf, IBUFSIZ - 1, /*loop_on_EINTR:*/ 1);
|
||||
else {
|
||||
int timeout = -1;
|
||||
# if ENABLE_ASH_IDLE_TIMEOUT
|
||||
@ -9663,7 +9663,7 @@ preadfd(void)
|
||||
}
|
||||
}
|
||||
#else
|
||||
nr = nonblock_immune_read(g_parsefile->pf_fd, buf, IBUFSIZ - 1);
|
||||
nr = nonblock_immune_read(g_parsefile->pf_fd, buf, IBUFSIZ - 1, /*loop_on_EINTR:*/ 1);
|
||||
#endif
|
||||
|
||||
#if 0 /* disabled: nonblock_immune_read() handles this problem */
|
||||
|
Reference in New Issue
Block a user