projects
/
mmh
/ commitdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
| commitdiff |
tree
raw
|
patch
|
inline
| side by side (parent:
27f39f1
)
pipe mail throu show on repl
author
Philipp Takacs
<philipp@bureaucracy.de>
Sun, 17 Jan 2016 13:19:11 +0000
(14:19 +0100)
committer
Philipp Takacs
<philipp@bureaucracy.de>
Fri, 22 Jan 2016 21:57:29 +0000
(22:57 +0100)
now repl works as expected for MIME-messages
uip/repl.c
patch
|
blob
|
history
diff --git
a/uip/repl.c
b/uip/repl.c
index
f5df9ec
..
71ae98e
100644
(file)
--- a/
uip/repl.c
+++ b/
uip/repl.c
@@
-740,7
+740,8
@@
insert(struct mailname *np)
static void
replfilter(FILE *in, FILE *out, char *filter)
{
static void
replfilter(FILE *in, FILE *out, char *filter)
{
- int pid, n;
+ int pid, pid_show, n;
+ int mailpipe[2];
char *errstr;
if (filter == NULL)
char *errstr;
if (filter == NULL)
@@
-752,12
+753,32
@@
replfilter(FILE *in, FILE *out, char *filter)
rewind(in);
lseek(fileno(in), (off_t) 0, SEEK_SET);
rewind(in);
lseek(fileno(in), (off_t) 0, SEEK_SET);
- switch (pid = fork()) {
+ if (pipe(mailpipe) == -1) {
+ adios(EX_OSERR, "pipe", "can't create pipe");
+ }
+
+ switch (pid_show = fork()) {
case NOTOK:
adios(EX_OSERR, "fork", "unable to");
case OK:
dup2(fileno(in), fileno(stdin));
case NOTOK:
adios(EX_OSERR, "fork", "unable to");
case OK:
dup2(fileno(in), fileno(stdin));
+ dup2(mailpipe[1], fileno(stdout));
+ for (n=3; n<OPEN_MAX; n++) {
+ close(n);
+ }
+
+ execlp("show", "show", "-file", "-", NULL);
+
+ adios(EX_OSERR, "exec", "unable to");
+ }
+
+ switch (pid = fork()) {
+ case NOTOK:
+ adios(EX_OSERR, "fork", "unable to");
+
+ case OK:
+ dup2(mailpipe[0], fileno(stdin));
dup2(fileno(out), fileno(stdout));
for (n=3; n<OPEN_MAX; n++) {
close(n);
dup2(fileno(out), fileno(stdout));
for (n=3; n<OPEN_MAX; n++) {
close(n);
@@
-771,9
+792,12
@@
replfilter(FILE *in, FILE *out, char *filter)
_exit(EX_OSERR);
default:
_exit(EX_OSERR);
default:
- if (pidXwait(pid, "mhl"))
+ if (pidXwait(-1, "show | mhl"))
exit(EX_SOFTWARE);
fseek(out, 0L, SEEK_END);
break;
}
exit(EX_SOFTWARE);
fseek(out, 0L, SEEK_END);
break;
}
+
+ close(mailpipe[0]);
+ close(mailpipe[1]);
}
}