diff options
author | Curtis McEnroe | 2018-08-10 13:36:00 -0400 |
---|---|---|
committer | Curtis McEnroe | 2018-08-10 13:36:00 -0400 |
commit | e9793b4bceac009e09598a7b98048b604c745daa (patch) | |
tree | ec1d57ab1d20e27bb77988a2e10dafcb3d318efa /url.c | |
parent | b740e937df159255e4a33375e9e3afd03dd5a49b (diff) |
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.
Diffstat (limited to 'url.c')
-rw-r--r-- | url.c | 30 |
1 files changed, 2 insertions, 28 deletions
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); } |