summaryrefslogtreecommitdiff
path: root/Src/input.c
diff options
context:
space:
mode:
Diffstat (limited to 'Src/input.c')
-rw-r--r--Src/input.c12
1 files changed, 10 insertions, 2 deletions
diff --git a/Src/input.c b/Src/input.c
index 1efabadeb..eb968ea72 100644
--- a/Src/input.c
+++ b/Src/input.c
@@ -141,16 +141,19 @@ shingetline(void)
int c;
char buf[BUFSIZ];
char *p;
+ int q = queue_signal_level();
p = buf;
- winch_unblock();
for (;;) {
+ winch_unblock();
+ dont_queue_signals();
do {
errno = 0;
c = fgetc(bshin);
} while (c < 0 && errno == EINTR);
if (c < 0 || c == '\n') {
winch_block();
+ restore_queue_signals(q);
if (c == '\n')
*p++ = '\n';
if (p > buf) {
@@ -167,12 +170,13 @@ shingetline(void)
*p++ = c;
if (p >= buf + BUFSIZ - 1) {
winch_block();
+ queue_signals();
line = zrealloc(line, ll + (p - buf) + 1);
memcpy(line + ll, buf, p - buf);
ll += p - buf;
line[ll] = '\0';
p = buf;
- winch_unblock();
+ unqueue_signals();
}
}
}
@@ -377,6 +381,8 @@ inputline(void)
static void
inputsetline(char *str, int flags)
{
+ queue_signals();
+
if ((inbufflags & INP_FREE) && inbuf) {
free(inbuf);
}
@@ -394,6 +400,8 @@ inputsetline(char *str, int flags)
else
inbufct = inbufleft;
inbufflags = flags;
+
+ unqueue_signals();
}
/*