wmsl

Block-based window manager status line
git clone https://git.sinitax.com/sinitax/wmsl
Log | Files | Refs | README | LICENSE | sfeed.txt

commit 5fb2935eb5b953e3b8a56be301e13f581cadc546
parent 26658a5e72e1443e36b85877d8b133cf0bfaa1a9
Author: Louis Burda <quent.burda@gmail.com>
Date:   Sun,  3 Jul 2022 03:53:28 +0200

Let block script die within 1s time limit instead of killing instantly

Diffstat:
Mwmsl.c | 23++++++++++++++---------
1 file changed, 14 insertions(+), 9 deletions(-)

diff --git a/wmsl.c b/wmsl.c @@ -156,6 +156,7 @@ read_block(int fd, char *buf, ssize_t size) { struct timeval timeout; struct timespec start, stop; + char tmp[256]; fd_set fdset; int ret, nread; uint64_t ns; @@ -163,6 +164,7 @@ read_block(int fd, char *buf, ssize_t size) clock_gettime(CLOCK_REALTIME, &start); + tok = NULL; ns = 0; do { FD_ZERO(&fdset); @@ -181,19 +183,22 @@ read_block(int fd, char *buf, ssize_t size) if (ret < 0 && errno == EINTR) continue; if (ret <= 0) break; - nread = read(fd, buf, size); - if (nread <= 0) break; + if (!tok) { + nread = read(fd, buf, size); + if (nread <= 0) break; - if ((tok = memchr(buf, '\n', nread))) { - *tok = '\0'; - return true; - } + tok = memchr(buf, '\n', nread); + if (tok) *tok = '\0'; - buf += nread; - size -= nread; + buf += nread; + size -= nread; + } else { + nread = read(fd, tmp, sizeof(tmp)); + if (nread <= 0) break; + } } while (ns < 1000000000); - return false; + return tok != NULL; } void