static long pipebwrite(struct chan *c, struct block *bp, uint32_t junk) { long n; Pipe *p; //Prog *r; p = c->aux; switch (NETTYPE(c->qid.path)) { case Qdata0: if (c->flag & O_NONBLOCK) n = qbwrite_nonblock(p->q[1], bp); else n = qbwrite(p->q[1], bp); break; case Qdata1: if (c->flag & O_NONBLOCK) n = qbwrite_nonblock(p->q[0], bp); else n = qbwrite(p->q[0], bp); break; default: n = 0; panic("pipebwrite"); } return n; }
static long pipebwrite(struct chan *c, struct block *bp, uint32_t junk) { ERRSTACK(2); long n; Pipe *p; //Prog *r; if (waserror()) { /* avoid exceptions when pipe is a mounted queue */ /* if((c->flag & CMSG) == 0) { r = up->iprog; if(r != NULL && r->kill == NULL) r->kill = "write on closed pipe"; } */ set_errno(EPIPE); nexterror(); } p = c->aux; switch (NETTYPE(c->qid.path)) { case Qdata0: if (c->flag & O_NONBLOCK) n = qbwrite_nonblock(p->q[1], bp); else n = qbwrite(p->q[1], bp); break; case Qdata1: if (c->flag & O_NONBLOCK) n = qbwrite_nonblock(p->q[0], bp); else n = qbwrite(p->q[0], bp); break; default: n = 0; panic("pipebwrite"); } poperror(); return n; }