Lines Matching defs:buf

57 	struct ibuf	*buf;
59 if ((buf = calloc(1, sizeof(struct ibuf))) == NULL)
62 if ((buf->buf = calloc(len, 1)) == NULL) {
63 free(buf);
67 buf->size = buf->max = len;
68 buf->fd = -1;
70 return (buf);
76 struct ibuf *buf;
83 if ((buf = calloc(1, sizeof(struct ibuf))) == NULL)
86 if ((buf->buf = calloc(len, 1)) == NULL) {
87 free(buf);
91 buf->size = len;
92 buf->max = max;
93 buf->fd = -1;
95 return (buf);
99 ibuf_reserve(struct ibuf *buf, size_t len)
103 if (len > SIZE_MAX - buf->wpos) {
107 if (buf->fd == IBUF_FD_MARK_ON_STACK) {
113 if (buf->wpos + len > buf->size) {
117 if (buf->wpos + len > buf->max) {
121 nb = realloc(buf->buf, buf->wpos + len);
124 memset(nb + buf->size, 0, buf->wpos + len - buf->size);
125 buf->buf = nb;
126 buf->size = buf->wpos + len;
129 b = buf->buf + buf->wpos;
130 buf->wpos += len;
135 ibuf_add(struct ibuf *buf, const void *data, size_t len)
139 if ((b = ibuf_reserve(buf, len)) == NULL)
147 ibuf_add_ibuf(struct ibuf *buf, const struct ibuf *from)
149 return ibuf_add(buf, ibuf_data(from), ibuf_size(from));
153 ibuf_add_n8(struct ibuf *buf, uint64_t value)
162 return ibuf_add(buf, &v, sizeof(v));
166 ibuf_add_n16(struct ibuf *buf, uint64_t value)
175 return ibuf_add(buf, &v, sizeof(v));
179 ibuf_add_n32(struct ibuf *buf, uint64_t value)
188 return ibuf_add(buf, &v, sizeof(v));
192 ibuf_add_n64(struct ibuf *buf, uint64_t value)
195 return ibuf_add(buf, &value, sizeof(value));
199 ibuf_add_h16(struct ibuf *buf, uint64_t value)
208 return ibuf_add(buf, &v, sizeof(v));
212 ibuf_add_h32(struct ibuf *buf, uint64_t value)
221 return ibuf_add(buf, &v, sizeof(v));
225 ibuf_add_h64(struct ibuf *buf, uint64_t value)
227 return ibuf_add(buf, &value, sizeof(value));
231 ibuf_add_zero(struct ibuf *buf, size_t len)
235 if ((b = ibuf_reserve(buf, len)) == NULL)
242 ibuf_seek(struct ibuf *buf, size_t pos, size_t len)
245 if (ibuf_size(buf) < pos || SIZE_MAX - pos < len ||
246 ibuf_size(buf) < pos + len) {
251 return (buf->buf + buf->rpos + pos);
255 ibuf_set(struct ibuf *buf, size_t pos, const void *data, size_t len)
259 if ((b = ibuf_seek(buf, pos, len)) == NULL)
267 ibuf_set_n8(struct ibuf *buf, size_t pos, uint64_t value)
276 return (ibuf_set(buf, pos, &v, sizeof(v)));
280 ibuf_set_n16(struct ibuf *buf, size_t pos, uint64_t value)
289 return (ibuf_set(buf, pos, &v, sizeof(v)));
293 ibuf_set_n32(struct ibuf *buf, size_t pos, uint64_t value)
302 return (ibuf_set(buf, pos, &v, sizeof(v)));
306 ibuf_set_n64(struct ibuf *buf, size_t pos, uint64_t value)
309 return (ibuf_set(buf, pos, &value, sizeof(value)));
313 ibuf_set_h16(struct ibuf *buf, size_t pos, uint64_t value)
322 return (ibuf_set(buf, pos, &v, sizeof(v)));
326 ibuf_set_h32(struct ibuf *buf, size_t pos, uint64_t value)
335 return (ibuf_set(buf, pos, &v, sizeof(v)));
339 ibuf_set_h64(struct ibuf *buf, size_t pos, uint64_t value)
341 return (ibuf_set(buf, pos, &value, sizeof(value)));
345 ibuf_data(const struct ibuf *buf)
347 return (buf->buf + buf->rpos);
351 ibuf_size(const struct ibuf *buf)
353 return (buf->wpos - buf->rpos);
357 ibuf_left(const struct ibuf *buf)
360 if (buf->fd == IBUF_FD_MARK_ON_STACK)
362 return (buf->max - buf->wpos);
366 ibuf_truncate(struct ibuf *buf, size_t len)
368 if (ibuf_size(buf) >= len) {
369 buf->wpos = buf->rpos + len;
372 if (buf->fd == IBUF_FD_MARK_ON_STACK) {
377 return ibuf_add_zero(buf, len - ibuf_size(buf));
381 ibuf_rewind(struct ibuf *buf)
383 buf->rpos = 0;
387 ibuf_close(struct msgbuf *msgbuf, struct ibuf *buf)
389 msgbuf_enqueue(msgbuf, buf);
393 ibuf_from_buffer(struct ibuf *buf, void *data, size_t len)
395 memset(buf, 0, sizeof(*buf));
396 buf->buf = data;
397 buf->size = buf->wpos = len;
398 buf->fd = IBUF_FD_MARK_ON_STACK;
402 ibuf_from_ibuf(struct ibuf *buf, const struct ibuf *from)
404 ibuf_from_buffer(buf, ibuf_data(from), ibuf_size(from));
408 ibuf_get(struct ibuf *buf, void *data, size_t len)
410 if (ibuf_size(buf) < len) {
415 memcpy(data, ibuf_data(buf), len);
416 buf->rpos += len;
421 ibuf_get_ibuf(struct ibuf *buf, size_t len, struct ibuf *new)
423 if (ibuf_size(buf) < len) {
428 ibuf_from_buffer(new, ibuf_data(buf), len);
429 buf->rpos += len;
434 ibuf_get_h16(struct ibuf *buf, uint16_t *value)
436 return ibuf_get(buf, value, sizeof(*value));
440 ibuf_get_h32(struct ibuf *buf, uint32_t *value)
442 return ibuf_get(buf, value, sizeof(*value));
446 ibuf_get_h64(struct ibuf *buf, uint64_t *value)
448 return ibuf_get(buf, value, sizeof(*value));
452 ibuf_get_n8(struct ibuf *buf, uint8_t *value)
454 return ibuf_get(buf, value, sizeof(*value));
458 ibuf_get_n16(struct ibuf *buf, uint16_t *value)
462 rv = ibuf_get(buf, value, sizeof(*value));
468 ibuf_get_n32(struct ibuf *buf, uint32_t *value)
472 rv = ibuf_get(buf, value, sizeof(*value));
478 ibuf_get_n64(struct ibuf *buf, uint64_t *value)
482 rv = ibuf_get(buf, value, sizeof(*value));
488 ibuf_get_string(struct ibuf *buf, size_t len)
492 if (ibuf_size(buf) < len) {
497 str = strndup(ibuf_data(buf), len);
500 buf->rpos += len;
505 ibuf_skip(struct ibuf *buf, size_t len)
507 if (ibuf_size(buf) < len) {
512 buf->rpos += len;
517 ibuf_free(struct ibuf *buf)
519 if (buf == NULL)
521 /* if buf lives on the stack abort before causing more harm */
522 if (buf->fd == IBUF_FD_MARK_ON_STACK)
524 if (buf->fd >= 0)
525 close(buf->fd);
526 freezero(buf->buf, buf->size);
527 free(buf);
531 ibuf_fd_avail(struct ibuf *buf)
533 return (buf->fd >= 0);
537 ibuf_fd_get(struct ibuf *buf)
542 if (buf->fd < 0)
544 fd = buf->fd;
545 buf->fd = -1;
550 ibuf_fd_set(struct ibuf *buf, int fd)
552 /* if buf lives on the stack abort before causing more harm */
553 if (buf->fd == IBUF_FD_MARK_ON_STACK)
555 if (buf->fd >= 0)
556 close(buf->fd);
557 buf->fd = -1;
559 buf->fd = fd;
581 char *buf;
588 if ((buf = malloc(IBUF_READ_SIZE)) == NULL)
593 free(buf);
597 msgbuf->rbuf = buf;
624 struct ibuf *buf;
627 while ((buf = TAILQ_FIRST(&msgbuf->bufs)) != NULL)
628 msgbuf_dequeue(msgbuf, buf);
632 while ((buf = TAILQ_FIRST(&msgbuf->rbufs)) != NULL) {
633 TAILQ_REMOVE(&msgbuf->rbufs, buf, entry);
634 ibuf_free(buf);
644 struct ibuf *buf;
646 if ((buf = TAILQ_FIRST(&msgbuf->rbufs)) != NULL)
647 TAILQ_REMOVE(&msgbuf->rbufs, buf, entry);
648 return buf;
655 struct ibuf *buf;
660 TAILQ_FOREACH(buf, &msgbuf->bufs, entry) {
663 iov[i].iov_base = ibuf_data(buf);
664 iov[i].iov_len = ibuf_size(buf);
688 struct ibuf *buf, *buf0 = NULL;
695 char buf[CMSG_SPACE(sizeof(int))];
701 TAILQ_FOREACH(buf, &msgbuf->bufs, entry) {
704 if (i > 0 && buf->fd != -1)
706 iov[i].iov_base = ibuf_data(buf);
707 iov[i].iov_len = ibuf_size(buf);
709 if (buf->fd != -1)
710 buf0 = buf;
720 msg.msg_control = (caddr_t)&cmsgbuf.buf;
721 msg.msg_controllen = sizeof(cmsgbuf.buf);
842 char buf[CMSG_SPACE(sizeof(int) * 1)];
860 msg.msg_control = &cmsgbuf.buf;
861 msg.msg_controllen = sizeof(cmsgbuf.buf);
913 msgbuf_read_enqueue(struct msgbuf *msgbuf, struct ibuf *buf)
915 /* if buf lives on the stack abort before causing more harm */
916 if (buf->fd == IBUF_FD_MARK_ON_STACK)
918 TAILQ_INSERT_TAIL(&msgbuf->rbufs, buf, entry);
922 msgbuf_enqueue(struct msgbuf *msgbuf, struct ibuf *buf)
924 /* if buf lives on the stack abort before causing more harm */
925 if (buf->fd == IBUF_FD_MARK_ON_STACK)
927 TAILQ_INSERT_TAIL(&msgbuf->bufs, buf, entry);
932 msgbuf_dequeue(struct msgbuf *msgbuf, struct ibuf *buf)
934 TAILQ_REMOVE(&msgbuf->bufs, buf, entry);
936 ibuf_free(buf);
942 struct ibuf *buf, *next;
944 for (buf = TAILQ_FIRST(&msgbuf->bufs); buf != NULL && n > 0;
945 buf = next) {
946 next = TAILQ_NEXT(buf, entry);
947 if (n >= ibuf_size(buf)) {
948 n -= ibuf_size(buf);
949 msgbuf_dequeue(msgbuf, buf);
951 buf->rpos += n;