[w3m-dev 03676] cleanup for pipe

* etc.c (open_pipe_rw): added
* file.c (uncompress_stream): rewrite using open_pipe_rw
* image.c (openImgdisplay): rewrite using open_pipe_rw
* local.c (localcgi_popen_rw): deleted
	(localcgi_post): rewrite using open_pipe_rw
* proto.h (open_pipe_rw): added
* search.c (migemor): initialized to NULL
	(migemow): initialized to NULL
	(migemo_pid): initialized to 0
	(open_migemo): rewrite using open_pipe_rw
From: Hironori SAKAMOTO <hsaka@mth.biglobe.ne.jp>
This commit is contained in:
Fumitoshi UKAI
2003-01-22 16:10:27 +00:00
parent d5097483bd
commit b8b4edb15b
7 changed files with 131 additions and 184 deletions

54
etc.c
View File

@@ -1,4 +1,4 @@
/* $Id: etc.c,v 1.52 2003/01/17 17:06:57 ukai Exp $ */
/* $Id: etc.c,v 1.53 2003/01/22 16:10:28 ukai Exp $ */
#include "fm.h"
#include <pwd.h>
#include "myctype.h"
@@ -1339,6 +1339,58 @@ setup_child(int child, int i, int f)
fmInitialized = FALSE;
}
pid_t
open_pipe_rw(FILE **fr, FILE **fw)
{
int fdr[2];
int fdw[2];
pid_t pid;
if (fr && pipe(fdr) < 0)
goto err0;
if (fw && pipe(fdw) < 0)
goto err1;
flush_tty();
pid = fork();
if (pid < 0)
goto err2;
if (pid == 0) {
/* child */
if (fr) {
close(fdr[0]);
dup2(fdr[1], 1);
}
if (fw) {
close(fdw[1]);
dup2(fdw[0], 0);
}
}
else {
if (fr) {
close(fdr[1]);
*fr = fdopen(fdr[0], "r");
}
if (fw) {
close(fdw[0]);
*fw = fdopen(fdw[1], "w");
}
}
return pid;
err2:
if (fw) {
close(fdw[0]);
close(fdw[1]);
}
err1:
if (fr) {
close(fdr[0]);
close(fdr[1]);
}
err0:
return (pid_t) -1;
}
void
myExec(char *command)
{