scroll

scrollbackbuffer program for st
git clone git://git.suckless.org//gitrepos
Log | Files | Refs

commit 2a2a2b48c83d17638e2b15d61eb5be126923ddd4
parent 9ec4cddca1d0612e9c13076ad357afb94a7cfdc5
Author: Jan Klemkow <j.klemkow@wemelug.de>
Date:   Wed,  5 Feb 2020 07:34:42 +0100

fix exit handling

Diffstat:
Mscroll.c | 13+++++++++----
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;