#include <u.h>
#include <libc.h>
#define NODEFINE
#include <9pm/u.h>
#include <9pm/libc.h>
#include <9pm/ns.h>
int
pm_pipe(int fd[2])
{
int i, sysfd[2];
char buf[30];
Chan *c[2];
Dir *d;
PmQid q;
if(pipe(sysfd) < 0){
pm_oserror();
return -1;
}
for(i=0; i<2; i++){
if((d = dirfstat(sysfd[i])) != nil){
q = *(PmQid*)&d->qid;
free(d);
}else
memset(&q, 0, sizeof q);
sprint(buf, "#|/pipe%d", i);
c[i] = pm_sysfd2chan(sysfd[i], ORDWR, q, buf);
}
if(pm_newfd2(fd, c) < 0){
pm_cclose(c[0]);
pm_cclose(c[1]);
return -1;
}
return 0;
}
syntax highlighted by Code2HTML, v. 0.9.1