char * fmthtml(char *msg) { int wr[2], rd[2], n; char buf[2048]; if(pipe(wr) == -1 || pipe(rd) == -1) sysfatal("pipe: %r"); switch(fork()){ case -1: sysfatal("fork: %r"); break; case 0: close(wr[0]); close(rd[1]); dup(wr[1], 0); dup(rd[0], 1); execl("/bin/htmlfmt", "htmlfmt -a", nil); sysfatal("exec: %r"); break; default: close(wr[1]); close(rd[0]); write(wr[0], msg, strlen(msg)); close(wr[0]); n = readn(rd[1], buf, sizeof(buf)); close(rd[1]); if(n == -1) sysfatal("read: %r\n"); buf[n] = 0; return buf; } return buf; }