blob: b3a6216d7351b034c9747c7eaac23271372a4c78 (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
|
#ifdef HAS_PIPE
void
do_pipe(TARG, rstab, wstab)
STR *TARG;
STAB *rstab;
STAB *wstab;
{
register STIO *rstio;
register STIO *wstio;
int fd[2];
if (!rstab)
goto badexit;
if (!wstab)
goto badexit;
rstio = stab_io(rstab);
wstio = stab_io(wstab);
if (!rstio)
rstio = stab_io(rstab) = stio_new();
else if (rstio->ifp)
do_close(rstab,FALSE);
if (!wstio)
wstio = stab_io(wstab) = stio_new();
else if (wstio->ifp)
do_close(wstab,FALSE);
if (pipe(fd) < 0)
goto badexit;
rstio->ifp = fdopen(fd[0], "r");
wstio->ofp = fdopen(fd[1], "w");
wstio->ifp = wstio->ofp;
rstio->type = '<';
wstio->type = '>';
if (!rstio->ifp || !wstio->ofp) {
if (rstio->ifp) fclose(rstio->ifp);
else close(fd[0]);
if (wstio->ofp) fclose(wstio->ofp);
else close(fd[1]);
goto badexit;
}
str_sset(TARG,&str_yes);
return;
badexit:
str_sset(TARG,&str_undef);
return;
}
#endif
|