commit 2a2a2b48c83d17638e2b15d61eb5be126923ddd4
parent 9ec4cddca1d0612e9c13076ad357afb94a7cfdc5
Author: Jan Klemkow <j.klemkow@wemelug.de>
Date: Wed, 5 Feb 2020 07:34:42 +0100
fix exit handling
Diffstat:
1 file changed, 9 insertions(+), 4 deletions(-)
diff --git a/scroll.c b/scroll.c
@@ -75,12 +75,14 @@ die(const char *fmt, ...)
void
sigchld(int sig)
{
+ pid_t pid;
+ int status;
+
assert(sig == SIGCHLD);
- pid_t pid;
- while ((pid = waitpid(-1, NULL, WNOHANG)) > 0)
+ while ((pid = waitpid(-1, &status, WNOHANG)) > 0)
if (pid == child)
- die("child died");
+ exit(status);
}
void
@@ -250,8 +252,11 @@ main(int argc, char *argv[])
die("write:");
}
if (FD_ISSET(mfd, &rd)) {
- if (read(mfd, &c, 1) <= 0 && errno != EINTR)
+ ssize_t n = read(mfd, &c, 1);
+ if (n == -1 && errno != EINTR)
die("read:");
+ if (n == 0)
+ return 0;
buf[pos++] = c;
if (pos == size) {
size *= 2;