diff options
Diffstat (limited to 'oldresources/st/patch/externalpipe.c')
| -rw-r--r-- | oldresources/st/patch/externalpipe.c | 76 |
1 files changed, 0 insertions, 76 deletions
diff --git a/oldresources/st/patch/externalpipe.c b/oldresources/st/patch/externalpipe.c deleted file mode 100644 index 37d8848..0000000 --- a/oldresources/st/patch/externalpipe.c +++ /dev/null @@ -1,76 +0,0 @@ -int extpipeactive = 0; - -void -#if EXTERNALPIPEIN_PATCH -extpipe(const Arg *arg, int in) -#else -externalpipe(const Arg *arg) -#endif // EXTERNALPIPEIN_PATCH -{ - 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]); - #if EXTERNALPIPEIN_PATCH - if (in) - dup2(csdfd, STDOUT_FILENO); - close(csdfd); - #endif // EXTERNALPIPEIN_PATCH - 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); - extpipeactive = 1; -} - -#if EXTERNALPIPEIN_PATCH -void -externalpipe(const Arg *arg) { - extpipe(arg, 0); -} - -void -externalpipein(const Arg *arg) { - extpipe(arg, 1); -} -#endif // EXTERNALPIPEIN_PATCH
\ No newline at end of file |
