~ruther/dwl

71f11e6cf63289d51f152469a0da81a85fe2608c — Leonardo Hernández Hernández 9 months ago 2b4893a
set O_NONBLOCK flag to stdout
3 files changed, 23 insertions(+), 0 deletions(-)

M dwl.c
M util.c
M util.h
M dwl.c => dwl.c +6 -0
@@ 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

M util.c => util.c +16 -0
@@ 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;
}

M util.h => util.h +1 -0
@@ 2,3 2,4 @@

void die(const char *fmt, ...);
void *ecalloc(size_t nmemb, size_t size);
int fd_set_nonblock(int fd);

Do not follow this link