uchar* read9ppkt(Ioproc *io, int fd) { uchar buf[4], *pkt; int n, nn; n = ioreadn(io, fd, buf, 4); if(n != 4) return nil; n = GBIT32(buf); if(n > MAXMSGSIZE) return nil; pkt = emalloc(n); PBIT32(pkt, n); nn = ioreadn(io, fd, pkt+4, n-4); if(nn != n-4){ free(pkt); return nil; } /* would do this if we ever got one of these, but we only generate them if(pkt[4] == Ropenfd){ newfd = iorecvfd(io, fd); PBIT32(pkt+n-4, newfd); } */ return pkt; }
int readibuf(Ibuf *b, char *buf, int len) { int n; n = b->wp - b->rp; if(n > 0){ if(n > len) n = len; memmove(buf, b->rp, n); b->rp += n; return n; } return ioreadn(b->io, b->fd, buf, len); }