summary refs log tree commit diff
path: root/url.c
diff options
context:
space:
mode:
authorCurtis McEnroe2018-08-10 13:36:00 -0400
committerCurtis McEnroe2018-08-10 13:36:00 -0400
commite9793b4bceac009e09598a7b98048b604c745daa (patch)
treeec1d57ab1d20e27bb77988a2e10dafcb3d318efa /url.c
parentb740e937df159255e4a33375e9e3afd03dd5a49b (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.c30
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);
 }