summaryrefslogtreecommitdiff
path: root/sfeed_curses.c
diff options
context:
space:
mode:
authorHiltjo Posthuma <hiltjo@codemadness.org>2022-05-05 06:28:11 +0200
committerHiltjo Posthuma <hiltjo@codemadness.org>2022-05-05 10:11:05 +0200
commit78e54359372d02d17e9ab453c7bc0cd725b807f2 (patch)
tree4328eada04808a5ffe9297839ceb97cca7b10403 /sfeed_curses.c
parentf0ca847fca5100dd98fbbed9c49b08ba5f310ac5 (diff)
sfeed_curses: close stdin for spawning a plumb program in non-interactive mode
This is only for plumbing in non-interactive mode in forkexec(), but not piping content. Probably obvious what the descriptors are, but also add a few comments to dup2 of the file descriptors (stdin, stdout, stderr). To reproduce a behaviour: Plumb script: #!/bin/sh dmenu Then launch it: SFEED_PLUMB_INTERACTIVE=0 SFEED_PLUMB=thescript sfeed_curses ~/.sfeed/feeds/* The program now waits on input while in non-interactive mode and only seems to hang. After: The program starts but just has no input passed to it.
Diffstat (limited to 'sfeed_curses.c')
-rw-r--r--sfeed_curses.c13
1 files changed, 7 insertions, 6 deletions
diff --git a/sfeed_curses.c b/sfeed_curses.c
index d09f8a0..78071b7 100644
--- a/sfeed_curses.c
+++ b/sfeed_curses.c
@@ -604,8 +604,8 @@ pipeitem(const char *cmd, struct item *item, int field, int interactive)
die("fork");
case 0:
if (!interactive) {
- dup2(devnullfd, 1);
- dup2(devnullfd, 2);
+ dup2(devnullfd, 1); /* stdout */
+ dup2(devnullfd, 2); /* stderr */
}
errno = 0;
@@ -642,8 +642,9 @@ forkexec(char *argv[], int interactive)
die("fork");
case 0:
if (!interactive) {
- dup2(devnullfd, 1);
- dup2(devnullfd, 2);
+ dup2(devnullfd, 0); /* stdin */
+ dup2(devnullfd, 1); /* stdout */
+ dup2(devnullfd, 2); /* stderr */
}
if (execvp(argv[0], argv) == -1)
_exit(1);
@@ -1847,8 +1848,8 @@ markread(struct pane *p, off_t from, off_t to, int isread)
case -1:
die("fork");
case 0:
- dup2(devnullfd, 1);
- dup2(devnullfd, 2);
+ dup2(devnullfd, 1); /* stdout */
+ dup2(devnullfd, 2); /* stderr */
errno = 0;
if (!(fp = popen(cmd, "w")))