Subversion Repositories planix.SVN

Rev

Blame | Last modification | View Log | RSS feed

#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;
}