summaryrefslogtreecommitdiff
path: root/patches/0st-externalpipe-0.8.4.diff
diff options
context:
space:
mode:
authorSaumit Dinesan <79687674+justsaumit@users.noreply.github.com>2022-02-22 07:29:36 +0530
committerGitHub <noreply@github.com>2022-02-22 07:29:36 +0530
commit469e6e4c05ccc2e5c22c8c50e8a22dcf11b813ab (patch)
tree59b6f5616f892b36079be736b15ff143f55228d5 /patches/0st-externalpipe-0.8.4.diff
parentb872cbc6612e358ad81a1f22aa8d37545203f558 (diff)
Delete 0st-externalpipe-0.8.4.diff
Diffstat (limited to 'patches/0st-externalpipe-0.8.4.diff')
-rw-r--r--patches/0st-externalpipe-0.8.4.diff92
1 files changed, 0 insertions, 92 deletions
diff --git a/patches/0st-externalpipe-0.8.4.diff b/patches/0st-externalpipe-0.8.4.diff
deleted file mode 100644
index 297d746..0000000
--- a/patches/0st-externalpipe-0.8.4.diff
+++ /dev/null
@@ -1,92 +0,0 @@
-diff --git a/st.c b/st.c
-index 76b7e0d..0e9a614 100644
---- a/st.c
-+++ b/st.c
-@@ -723,8 +723,14 @@ sigchld(int a)
- if ((p = waitpid(pid, &stat, WNOHANG)) < 0)
- die("waiting for pid %hd failed: %s\n", pid, strerror(errno));
-
-- if (pid != p)
-+ if (pid != p) {
-+ if (p == 0 && wait(&stat) < 0)
-+ die("wait: %s\n", strerror(errno));
-+
-+ /* reinstall sigchld handler */
-+ signal(SIGCHLD, sigchld);
- return;
-+ }
-
- if (WIFEXITED(stat) && WEXITSTATUS(stat))
- die("child exited with status %d\n", WEXITSTATUS(stat));
-@@ -1926,6 +1932,59 @@ strparse(void)
- }
- }
-
-+void
-+externalpipe(const Arg *arg)
-+{
-+ int to[2];
-+ char buf[UTF_SIZ];
-+ void (*oldsigpipe)(int);
-+ Glyph *bp, *end;
-+ int lastpos, n, newline;
-+
-+ if (pipe(to) == -1)
-+ return;
-+
-+ switch (fork()) {
-+ case -1:
-+ close(to[0]);
-+ close(to[1]);
-+ return;
-+ case 0:
-+ dup2(to[0], STDIN_FILENO);
-+ close(to[0]);
-+ close(to[1]);
-+ execvp(((char **)arg->v)[0], (char **)arg->v);
-+ fprintf(stderr, "st: execvp %s\n", ((char **)arg->v)[0]);
-+ perror("failed");
-+ exit(0);
-+ }
-+
-+ close(to[0]);
-+ /* ignore sigpipe for now, in case child exists early */
-+ oldsigpipe = signal(SIGPIPE, SIG_IGN);
-+ newline = 0;
-+ for (n = 0; n < term.row; n++) {
-+ bp = term.line[n];
-+ lastpos = MIN(tlinelen(n) + 1, term.col) - 1;
-+ if (lastpos < 0)
-+ break;
-+ end = &bp[lastpos + 1];
-+ for (; bp < end; ++bp)
-+ if (xwrite(to[1], buf, utf8encode(bp->u, buf)) < 0)
-+ break;
-+ if ((newline = term.line[n][lastpos].mode & ATTR_WRAP))
-+ continue;
-+ if (xwrite(to[1], "\n", 1) < 0)
-+ break;
-+ newline = 0;
-+ }
-+ if (newline)
-+ (void)xwrite(to[1], "\n", 1);
-+ close(to[1]);
-+ /* restore */
-+ signal(SIGPIPE, oldsigpipe);
-+}
-+
- void
- strdump(void)
- {
-diff --git a/st.h b/st.h
-index 3d351b6..392b64e 100644
---- a/st.h
-+++ b/st.h
-@@ -81,6 +81,7 @@ void die(const char *, ...);
- void redraw(void);
- void draw(void);
-
-+void externalpipe(const Arg *);
- void printscreen(const Arg *);
- void printsel(const Arg *);
- void sendbreak(const Arg *);