Lines Matching +full:max +full:- +full:msg +full:- +full:size
1 /* $OpenBSD: imsg-buffer.c,v 1.7 2015/07/12 18:40:49 nicm Exp $ */
43 if ((buf->buf = malloc(len)) == NULL) { in ibuf_open()
47 buf->size = buf->max = len; in ibuf_open()
48 buf->fd = -1; in ibuf_open()
54 ibuf_dynamic(size_t len, size_t max) in ibuf_dynamic() argument
58 if (max < len) in ibuf_dynamic()
64 if (max > 0) in ibuf_dynamic()
65 buf->max = max; in ibuf_dynamic()
75 /* on static buffers max is eq size and so the following fails */ in ibuf_realloc()
76 if (buf->wpos + len > buf->max) { in ibuf_realloc()
78 return (-1); in ibuf_realloc()
81 b = realloc(buf->buf, buf->wpos + len); in ibuf_realloc()
83 return (-1); in ibuf_realloc()
84 buf->buf = b; in ibuf_realloc()
85 buf->size = buf->wpos + len; in ibuf_realloc()
93 if (buf->wpos + len > buf->size) in ibuf_add()
94 if (ibuf_realloc(buf, len) == -1) in ibuf_add()
95 return (-1); in ibuf_add()
97 memcpy(buf->buf + buf->wpos, data, len); in ibuf_add()
98 buf->wpos += len; in ibuf_add()
107 if (buf->wpos + len > buf->size) in ibuf_reserve()
108 if (ibuf_realloc(buf, len) == -1) in ibuf_reserve()
111 b = buf->buf + buf->wpos; in ibuf_reserve()
112 buf->wpos += len; in ibuf_reserve()
120 if (pos + len > buf->wpos) in ibuf_seek()
123 return (buf->buf + pos); in ibuf_seek()
129 return (buf->wpos); in ibuf_size()
135 return (buf->max - buf->wpos); in ibuf_left()
153 TAILQ_FOREACH(buf, &msgbuf->bufs, entry) { in ibuf_write()
156 iov[i].iov_base = buf->buf + buf->rpos; in ibuf_write()
157 iov[i].iov_len = buf->wpos - buf->rpos; in ibuf_write()
162 if ((n = writev(msgbuf->fd, iov, i)) == -1) { in ibuf_write()
167 return (-1); in ibuf_write()
183 free(buf->buf); in ibuf_free()
190 msgbuf->queued = 0; in msgbuf_init()
191 msgbuf->fd = -1; in msgbuf_init()
192 TAILQ_INIT(&msgbuf->bufs); in msgbuf_init()
200 for (buf = TAILQ_FIRST(&msgbuf->bufs); buf != NULL && n > 0; in msgbuf_drain()
203 if (buf->rpos + n >= buf->wpos) { in msgbuf_drain()
204 n -= buf->wpos - buf->rpos; in msgbuf_drain()
207 buf->rpos += n; in msgbuf_drain()
218 while ((buf = TAILQ_FIRST(&msgbuf->bufs)) != NULL) in msgbuf_clear()
229 struct msghdr msg; in msgbuf_write() local
237 memset(&msg, 0, sizeof(msg)); in msgbuf_write()
239 TAILQ_FOREACH(buf, &msgbuf->bufs, entry) { in msgbuf_write()
242 iov[i].iov_base = buf->buf + buf->rpos; in msgbuf_write()
243 iov[i].iov_len = buf->wpos - buf->rpos; in msgbuf_write()
245 if (buf->fd != -1) in msgbuf_write()
249 msg.msg_iov = iov; in msgbuf_write()
250 msg.msg_iovlen = i; in msgbuf_write()
252 if (buf != NULL && buf->fd != -1) { in msgbuf_write()
253 msg.msg_control = (caddr_t)&cmsgbuf.buf; in msgbuf_write()
254 msg.msg_controllen = sizeof(cmsgbuf.buf); in msgbuf_write()
255 cmsg = CMSG_FIRSTHDR(&msg); in msgbuf_write()
256 cmsg->cmsg_len = CMSG_LEN(sizeof(int)); in msgbuf_write()
257 cmsg->cmsg_level = SOL_SOCKET; in msgbuf_write()
258 cmsg->cmsg_type = SCM_RIGHTS; in msgbuf_write()
259 *(int *)CMSG_DATA(cmsg) = buf->fd; in msgbuf_write()
263 if ((n = sendmsg(msgbuf->fd, &msg, 0)) == -1) { in msgbuf_write()
268 return (-1); in msgbuf_write()
280 if (buf != NULL && buf->fd != -1) { in msgbuf_write()
281 close(buf->fd); in msgbuf_write()
282 buf->fd = -1; in msgbuf_write()
293 TAILQ_INSERT_TAIL(&msgbuf->bufs, buf, entry); in ibuf_enqueue()
294 msgbuf->queued++; in ibuf_enqueue()
300 TAILQ_REMOVE(&msgbuf->bufs, buf, entry); in ibuf_dequeue()
302 if (buf->fd != -1) in ibuf_dequeue()
303 close(buf->fd); in ibuf_dequeue()
305 msgbuf->queued--; in ibuf_dequeue()