From e9793b4bceac009e09598a7b98048b604c745daa Mon Sep 17 00:00:00 2001 From: Curtis McEnroe Date: Fri, 10 Aug 2018 13:36:00 -0400 Subject: Move process spawning onto the event loop Child processes weren't being reaped before, either. I wanted to have a function called readEmAndReap but the reaping should actually happen in a signal handler. --- url.c | 30 ++---------------------------- 1 file changed, 2 insertions(+), 28 deletions(-) (limited to 'url.c') diff --git a/url.c b/url.c index 33652ff..1c57126 100644 --- a/url.c +++ b/url.c @@ -64,32 +64,6 @@ void urlList(void) { void urlOpen(size_t i) { char *url = ring[(last - i) & (RING_LEN - 1)]; if (!url) return; - - int fd[2]; - int error = pipe(fd); - if (error) err(EX_OSERR, "pipe"); - - pid_t pid = fork(); - if (pid < 0) err(EX_OSERR, "fork"); - - if (!pid) { - close(STDIN_FILENO); - dup2(fd[1], STDOUT_FILENO); - dup2(fd[1], STDERR_FILENO); - execlp("open", "open", url, NULL); - perror("open"); - exit(EX_CONFIG); - } - close(fd[1]); - - // FIXME: This should technically go on the main event loop. - char buf[256]; - ssize_t len = read(fd[0], buf, sizeof(buf) - 1); - if (len < 0) err(EX_IOERR, "read"); - if (len) { - buf[len] = '\0'; - len = strcspn(buf, "\n"); - uiFmt("%.*s", (int)len, buf); - } - close(fd[0]); + char *argv[] = { "open", url, NULL }; + spawn(argv); } -- cgit 1.4.1