diff options
author | Leonardo Hernández Hernández <leohdz172@proton.me> | 2024-06-27 13:19:16 -0600 |
---|---|---|
committer | Leonardo Hernández Hernández <leohdz172@proton.me> | 2024-07-01 20:40:54 -0600 |
commit | 71f11e6cf63289d51f152469a0da81a85fe2608c (patch) | |
tree | c5b63e1836cfaf5289bcdc2938cac15d2e09e3f4 | |
parent | 2b4893a0ad57fb5234c48615a2e531401efcf69c (diff) |
set O_NONBLOCK flag to stdout
-rw-r--r-- | dwl.c | 6 | ||||
-rw-r--r-- | util.c | 16 | ||||
-rw-r--r-- | util.h | 1 |
3 files changed, 23 insertions, 0 deletions
@@ -2190,6 +2190,12 @@ run(char *startup_cmd) close(piperw[1]); close(piperw[0]); } + + /* Mark stdout as non-blocking to avoid people who does not close stdin + * nor consumes it in their startup script getting dwl frozen */ + if (fd_set_nonblock(STDOUT_FILENO) < 0) + close(STDOUT_FILENO); + printstatus(); /* At this point the outputs are initialized, choose initial selmon based on @@ -3,6 +3,7 @@ #include <stdio.h> #include <stdlib.h> #include <string.h> +#include <fcntl.h> #include "util.h" @@ -33,3 +34,18 @@ ecalloc(size_t nmemb, size_t size) die("calloc:"); return p; } + +int +fd_set_nonblock(int fd) { + int flags = fcntl(fd, F_GETFL); + if (flags < 0) { + perror("fcntl(F_GETFL):"); + return -1; + } + if (fcntl(fd, F_SETFL, flags | O_NONBLOCK) < 0) { + perror("fcntl(F_SETFL):"); + return -1; + } + + return 0; +} @@ -2,3 +2,4 @@ void die(const char *fmt, ...); void *ecalloc(size_t nmemb, size_t size); +int fd_set_nonblock(int fd); |