Lines Matching defs:msgbuf

35 struct msgbuf {
47 static void msgbuf_read_enqueue(struct msgbuf *, struct ibuf *);
48 static void msgbuf_enqueue(struct msgbuf *, struct ibuf *);
49 static void msgbuf_dequeue(struct msgbuf *, struct ibuf *);
50 static void msgbuf_drain(struct msgbuf *, size_t);
387 ibuf_close(struct msgbuf *msgbuf, struct ibuf *buf)
389 msgbuf_enqueue(msgbuf, buf);
562 struct msgbuf *
565 struct msgbuf *msgbuf;
567 if ((msgbuf = calloc(1, sizeof(*msgbuf))) == NULL)
569 msgbuf->queued = 0;
570 TAILQ_INIT(&msgbuf->bufs);
571 TAILQ_INIT(&msgbuf->rbufs);
573 return msgbuf;
576 struct msgbuf *
580 struct msgbuf *msgbuf;
591 msgbuf = msgbuf_new();
592 if (msgbuf == NULL) {
597 msgbuf->rbuf = buf;
598 msgbuf->hdrsize = hdrsz;
599 msgbuf->readhdr = readhdr;
600 msgbuf->rarg = arg;
602 return (msgbuf);
606 msgbuf_free(struct msgbuf *msgbuf)
608 if (msgbuf == NULL)
610 msgbuf_clear(msgbuf);
611 free(msgbuf->rbuf);
612 free(msgbuf);
616 msgbuf_queuelen(struct msgbuf *msgbuf)
618 return (msgbuf->queued);
622 msgbuf_clear(struct msgbuf *msgbuf)
627 while ((buf = TAILQ_FIRST(&msgbuf->bufs)) != NULL)
628 msgbuf_dequeue(msgbuf, buf);
629 msgbuf->queued = 0;
632 while ((buf = TAILQ_FIRST(&msgbuf->rbufs)) != NULL) {
633 TAILQ_REMOVE(&msgbuf->rbufs, buf, entry);
636 msgbuf->roff = 0;
637 ibuf_free(msgbuf->rpmsg);
638 msgbuf->rpmsg = NULL;
642 msgbuf_get(struct msgbuf *msgbuf)
646 if ((buf = TAILQ_FIRST(&msgbuf->rbufs)) != NULL)
647 TAILQ_REMOVE(&msgbuf->rbufs, buf, entry);
652 ibuf_write(int fd, struct msgbuf *msgbuf)
660 TAILQ_FOREACH(buf, &msgbuf->bufs, entry) {
680 msgbuf_drain(msgbuf, n);
685 msgbuf_write(int fd, struct msgbuf *msgbuf)
701 TAILQ_FOREACH(buf, &msgbuf->bufs, entry) {
748 msgbuf_drain(msgbuf, n);
754 ibuf_read_process(struct msgbuf *msgbuf, int fd)
759 ibuf_from_buffer(&rbuf, msgbuf->rbuf, msgbuf->roff);
762 if (msgbuf->rpmsg == NULL) {
763 if (ibuf_size(&rbuf) < msgbuf->hdrsize)
767 msgbuf->hdrsize);
768 if ((msgbuf->rpmsg = msgbuf->readhdr(&msg,
769 msgbuf->rarg, &fd)) == NULL)
773 if (ibuf_left(msgbuf->rpmsg) <= ibuf_size(&rbuf))
774 sz = ibuf_left(msgbuf->rpmsg);
780 ibuf_add_ibuf(msgbuf->rpmsg, &msg) == -1)
783 if (ibuf_left(msgbuf->rpmsg) == 0) {
784 msgbuf_read_enqueue(msgbuf, msgbuf->rpmsg);
785 msgbuf->rpmsg = NULL;
790 memmove(msgbuf->rbuf, ibuf_data(&rbuf), ibuf_size(&rbuf));
791 msgbuf->roff = ibuf_size(&rbuf);
805 ibuf_read(int fd, struct msgbuf *msgbuf)
810 if (msgbuf->rbuf == NULL) {
815 iov.iov_base = msgbuf->rbuf + msgbuf->roff;
816 iov.iov_len = IBUF_READ_SIZE - msgbuf->roff;
830 msgbuf->roff += n;
832 return (ibuf_read_process(msgbuf, -1));
836 msgbuf_read(int fd, struct msgbuf *msgbuf)
848 if (msgbuf->rbuf == NULL) {
856 iov.iov_base = msgbuf->rbuf + msgbuf->roff;
857 iov.iov_len = IBUF_READ_SIZE - msgbuf->roff;
882 msgbuf->roff += n;
909 return (ibuf_read_process(msgbuf, fdpass));
913 msgbuf_read_enqueue(struct msgbuf *msgbuf, struct ibuf *buf)
918 TAILQ_INSERT_TAIL(&msgbuf->rbufs, buf, entry);
922 msgbuf_enqueue(struct msgbuf *msgbuf, struct ibuf *buf)
927 TAILQ_INSERT_TAIL(&msgbuf->bufs, buf, entry);
928 msgbuf->queued++;
932 msgbuf_dequeue(struct msgbuf *msgbuf, struct ibuf *buf)
934 TAILQ_REMOVE(&msgbuf->bufs, buf, entry);
935 msgbuf->queued--;
940 msgbuf_drain(struct msgbuf *msgbuf, size_t n)
944 for (buf = TAILQ_FIRST(&msgbuf->bufs); buf != NULL && n > 0;
949 msgbuf_dequeue(msgbuf, buf);