xref: /original-bsd/old/refer/hunt/refer3.c (revision e1db577d)
1 /*-
2  * %sccs.include.proprietary.c%
3  */
4 
5 #ifndef lint
6 static char sccsid[] = "@(#)refer3.c	4.3 (Berkeley) 04/18/91";
7 #endif /* not lint */
8 
9 #include "refer..c"
10 #define move(x, y) close(y); dup(x); close(x);
11 
12 corout(in, out, rprog, arg, outlen)
13 char *in, *out, *rprog;
14 {
15 	int pipev[2], fr1, fr2, fw1, fw2, n;
16 	int status;
17 
18 	pipe(pipev);
19 	fr1 = pipev[0];
20 	fw1 = pipev[1];
21 	pipe(pipev);
22 	fr2 = pipev[0];
23 	fw2 = pipev[1];
24 	if (fork() == 0)
25 	{
26 		close(fw1);
27 		close(fr2);
28 		move(fr1, 0);
29 		move(fw2, 1);
30 		execl(rprog, "deliv", arg, 0);
31 		err("Can't run %s", rprog);
32 	}
33 	close(fw2);
34 	close(fr1);
35 	write(fw1, in , strlen(in));
36 	close(fw1);
37 	wait(&status);
38 	n = read(fr2, out, outlen);
39 	out[n] = 0;
40 	close(fr2);
41 	return(n);
42 }
43