12345678910111213141516171819202122232425262728293031323334353637383940414243 |
- #include "common.h"
- #include "send.h"
- /* pipe an address through a command to translate it */
- extern dest *
- translate(dest *dp)
- {
- process *pp;
- String *line;
- dest *rv;
- char *cp;
- int n;
- pp = proc_start(s_to_c(dp->repl1), (stream *)0, outstream(), outstream(), 1, 0);
- if (pp == 0) {
- dp->status = d_resource;
- return 0;
- }
- line = s_new();
- for(;;) {
- cp = Brdline(pp->std[1]->fp, '\n');
- if(cp == 0)
- break;
- if(strncmp(cp, "_nosummary_", 11) == 0){
- nosummary = 1;
- continue;
- }
- n = Blinelen(pp->std[1]->fp);
- cp[n-1] = ' ';
- s_nappend(line, cp, n);
- }
- rv = s_to_dest(s_restart(line), dp);
- s_restart(line);
- while(s_read_line(pp->std[2]->fp, line))
- ;
- if ((dp->pstat = proc_wait(pp)) != 0) {
- dp->repl2 = line;
- rv = 0;
- } else
- s_free(line);
- proc_free(pp);
- return rv;
- }
|