xref: /plan9/sys/src/cmd/upas/send/translate.c (revision 7dd7cddf99dd7472612f1413b4da293630e6b1bc)
13e12c5d1SDavid du Colombier #include "common.h"
23e12c5d1SDavid du Colombier #include "send.h"
33e12c5d1SDavid du Colombier 
43e12c5d1SDavid du Colombier /* pipe an address through a command to translate it */
53e12c5d1SDavid du Colombier extern dest *
translate(dest * dp)63e12c5d1SDavid du Colombier translate(dest *dp)
73e12c5d1SDavid du Colombier {
83e12c5d1SDavid du Colombier 	process *pp;
93e12c5d1SDavid du Colombier 	String *line;
103e12c5d1SDavid du Colombier 	dest *rv;
11*7dd7cddfSDavid du Colombier 	char *cp;
12*7dd7cddfSDavid du Colombier 	int n;
133e12c5d1SDavid du Colombier 
14bd389b36SDavid du Colombier 	pp = proc_start(s_to_c(dp->repl1), (stream *)0, outstream(), outstream(), 1, 0);
153e12c5d1SDavid du Colombier 	if (pp == 0) {
163e12c5d1SDavid du Colombier 		dp->status = d_resource;
173e12c5d1SDavid du Colombier 		return 0;
183e12c5d1SDavid du Colombier 	}
193e12c5d1SDavid du Colombier 	line = s_new();
20*7dd7cddfSDavid du Colombier 	for(;;) {
21*7dd7cddfSDavid du Colombier 		cp = Brdline(pp->std[1]->fp, '\n');
22*7dd7cddfSDavid du Colombier 		if(cp == 0)
23*7dd7cddfSDavid du Colombier 			break;
24*7dd7cddfSDavid du Colombier 		if(strncmp(cp, "_nosummary_", 11) == 0){
25*7dd7cddfSDavid du Colombier 			nosummary = 1;
26*7dd7cddfSDavid du Colombier 			continue;
27*7dd7cddfSDavid du Colombier 		}
28*7dd7cddfSDavid du Colombier 		n = Blinelen(pp->std[1]->fp);
29*7dd7cddfSDavid du Colombier 		cp[n-1] = ' ';
30*7dd7cddfSDavid du Colombier 		s_nappend(line, cp, n);
31*7dd7cddfSDavid du Colombier 	}
323e12c5d1SDavid du Colombier 	rv = s_to_dest(s_restart(line), dp);
333e12c5d1SDavid du Colombier 	s_restart(line);
343e12c5d1SDavid du Colombier 	while(s_read_line(pp->std[2]->fp, line))
353e12c5d1SDavid du Colombier 		;
363e12c5d1SDavid du Colombier 	if ((dp->pstat = proc_wait(pp)) != 0) {
373e12c5d1SDavid du Colombier 		dp->repl2 = line;
383e12c5d1SDavid du Colombier 		rv = 0;
393e12c5d1SDavid du Colombier 	} else
403e12c5d1SDavid du Colombier 		s_free(line);
413e12c5d1SDavid du Colombier 	proc_free(pp);
423e12c5d1SDavid du Colombier 	return rv;
433e12c5d1SDavid du Colombier }
44