Home | History | Annotate | Download | only in compat

Lines Matching refs:msgbuf

53 struct msgbuf {
64 static void msgbuf_drain(struct msgbuf *, size_t);
445 ibuf_close(struct msgbuf *msgbuf, struct ibuf *buf)
447 ibufq_push(&msgbuf->bufs, buf);
641 struct msgbuf *
644 struct msgbuf *msgbuf;
646 if ((msgbuf = calloc(1, sizeof(*msgbuf))) == NULL)
648 ibufq_init(&msgbuf->bufs);
649 ibufq_init(&msgbuf->rbufs);
651 return msgbuf;
654 struct msgbuf *
658 struct msgbuf *msgbuf;
669 msgbuf = msgbuf_new();
670 if (msgbuf == NULL) {
675 msgbuf->rbuf = buf;
676 msgbuf->hdrsize = hdrsz;
677 msgbuf->readhdr = readhdr;
678 msgbuf->rarg = arg;
680 return (msgbuf);
684 msgbuf_free(struct msgbuf *msgbuf)
686 if (msgbuf == NULL)
688 msgbuf_clear(msgbuf);
689 free(msgbuf->rbuf);
690 free(msgbuf);
694 msgbuf_queuelen(struct msgbuf *msgbuf)
696 return ibufq_queuelen(&msgbuf->bufs);
700 msgbuf_clear(struct msgbuf *msgbuf)
703 ibufq_flush(&msgbuf->bufs);
706 ibufq_flush(&msgbuf->rbufs);
707 msgbuf->roff = 0;
708 ibuf_free(msgbuf->rpmsg);
709 msgbuf->rpmsg = NULL;
713 msgbuf_get(struct msgbuf *msgbuf)
715 return ibufq_pop(&msgbuf->rbufs);
719 msgbuf_concat(struct msgbuf *msgbuf, struct ibufqueue *from)
721 ibufq_concat(&msgbuf->bufs, from);
725 ibuf_write(int fd, struct msgbuf *msgbuf)
733 TAILQ_FOREACH(buf, &msgbuf->bufs.bufs, entry) {
753 msgbuf_drain(msgbuf, n);
758 msgbuf_write(int fd, struct msgbuf *msgbuf)
774 TAILQ_FOREACH(buf, &msgbuf->bufs.bufs, entry) {
821 msgbuf_drain(msgbuf, n);
827 ibuf_read_process(struct msgbuf *msgbuf, int fd)
832 ibuf_from_buffer(&rbuf, msgbuf->rbuf, msgbuf->roff);
835 if (msgbuf->rpmsg == NULL) {
836 if (ibuf_size(&rbuf) < msgbuf->hdrsize)
840 msgbuf->hdrsize);
841 if ((msgbuf->rpmsg = msgbuf->readhdr(&msg,
842 msgbuf->rarg, &fd)) == NULL)
846 if (ibuf_left(msgbuf->rpmsg) <= ibuf_size(&rbuf))
847 sz = ibuf_left(msgbuf->rpmsg);
853 ibuf_add_ibuf(msgbuf->rpmsg, &msg) == -1)
856 if (ibuf_left(msgbuf->rpmsg) == 0) {
857 ibufq_push(&msgbuf->rbufs, msgbuf->rpmsg);
858 msgbuf->rpmsg = NULL;
863 memmove(msgbuf->rbuf, ibuf_data(&rbuf), ibuf_size(&rbuf));
864 msgbuf->roff = ibuf_size(&rbuf);
878 ibuf_read(int fd, struct msgbuf *msgbuf)
883 if (msgbuf->rbuf == NULL) {
888 iov.iov_base = msgbuf->rbuf + msgbuf->roff;
889 iov.iov_len = IBUF_READ_SIZE - msgbuf->roff;
903 msgbuf->roff += n;
905 return (ibuf_read_process(msgbuf, -1));
909 msgbuf_read(int fd, struct msgbuf *msgbuf)
921 if (msgbuf->rbuf == NULL) {
929 iov.iov_base = msgbuf->rbuf + msgbuf->roff;
930 iov.iov_len = IBUF_READ_SIZE - msgbuf->roff;
955 msgbuf->roff += n;
982 return (ibuf_read_process(msgbuf, fdpass));
986 msgbuf_drain(struct msgbuf *msgbuf, size_t n)
990 while ((buf = TAILQ_FIRST(&msgbuf->bufs.bufs)) != NULL) {
993 TAILQ_REMOVE(&msgbuf->bufs.bufs, buf, entry);
994 msgbuf->bufs.queued--;