From 8be57cdf22adec6843a091ec705c5906feeadc68 Mon Sep 17 00:00:00 2001 From: Raheman Vaiya Date: Mon, 18 Mar 2024 00:04:40 -0400 Subject: [PATCH] monitor: Fix file redirection bug (#696) --- src/monitor.c | 11 +++++++++-- 1 file changed, 9 insertions(+), 2 deletions(-) diff --git a/src/monitor.c b/src/monitor.c index e0e23c3..aed5bb0 100644 --- a/src/monitor.c +++ b/src/monitor.c @@ -82,6 +82,8 @@ int event_handler(struct event *ev) int monitor(int argc, char *argv[]) { + struct stat st; + if (argc == 2 && !strcmp(argv[1], "-h")) { printf("Usage: keyd monitor [-t]\n\n\t-t: Print the time in milliseconds between events.\n"); return 0; @@ -93,8 +95,13 @@ int monitor(int argc, char *argv[]) if (isatty(1)) set_tflags(ECHO, 0); - /* Eagerly terminate on pipe closures. */ - if (!isatty(1)) + if (fstat(1, &st)) { + perror("fstat"); + exit(-1); + } + + /* If stdout is a process, terminate on pipe closures. */ + if (st.st_mode & S_IFIFO) evloop_add_fd(1); setvbuf(stdout, NULL, _IOLBF, 0);