59 lines
1.4 KiB
Diff
59 lines
1.4 KiB
Diff
From 1b1ff2d6edd2db321926f7243004937cb26f9f15 Mon Sep 17 00:00:00 2001
|
|
From: Karel Zak <kzak@redhat.com>
|
|
Date: Fri, 5 Oct 2007 12:22:13 +0200
|
|
Subject: [PATCH] script: dies on SIGWINCH
|
|
|
|
The "doinput" process doesn't make a difference between SIGWINCH and
|
|
SIGCHILD. This process also sends unnecessary SIGWINCH to child (the
|
|
signal is ignored by child). Fixed.
|
|
|
|
Signed-off-by: Karel Zak <kzak@redhat.com>
|
|
---
|
|
misc-utils/script.c | 14 ++++++++++----
|
|
1 files changed, 10 insertions(+), 4 deletions(-)
|
|
|
|
diff --git a/misc-utils/script.c b/misc-utils/script.c
|
|
index d3272df..3b957d8 100644
|
|
--- a/misc-utils/script.c
|
|
+++ b/misc-utils/script.c
|
|
@@ -99,6 +99,7 @@ int tflg = 0;
|
|
static char *progname;
|
|
|
|
int die;
|
|
+int resized;
|
|
|
|
static void
|
|
die_if_link(char *fn) {
|
|
@@ -235,8 +236,14 @@ doinput() {
|
|
if (die == 0 && child && kill(child, 0) == -1 && errno == ESRCH)
|
|
die = 1;
|
|
|
|
- while (die == 0 && (cc = read(0, ibuf, BUFSIZ)) > 0)
|
|
- (void) write(master, ibuf, cc);
|
|
+ while (die == 0) {
|
|
+ if ((cc = read(0, ibuf, BUFSIZ)) > 0)
|
|
+ (void) write(master, ibuf, cc);
|
|
+ else if (cc == -1 && errno == EINTR && resized)
|
|
+ resized = 0;
|
|
+ else
|
|
+ break;
|
|
+ }
|
|
|
|
done();
|
|
}
|
|
@@ -255,11 +262,10 @@ finish(int dummy) {
|
|
|
|
void
|
|
resize(int dummy) {
|
|
+ resized = 1;
|
|
/* transmit window change information to the child */
|
|
(void) ioctl(0, TIOCGWINSZ, (char *)&win);
|
|
(void) ioctl(slave, TIOCSWINSZ, (char *)&win);
|
|
-
|
|
- kill(child, SIGWINCH);
|
|
}
|
|
|
|
/*
|
|
--
|
|
1.5.3.1
|
|
|