imsg
imsg_get(struct imsgbuf *ibuf, struct imsg *imsg)
memcpy(&imsg->hdr, ibuf->r.buf, sizeof(imsg->hdr));
if (imsg->hdr.len < IMSG_HEADER_SIZE ||
imsg->hdr.len > MAX_IMSGSIZE) {
if (imsg->hdr.len > av)
datalen = imsg->hdr.len - IMSG_HEADER_SIZE;
imsg->data = NULL;
else if ((imsg->data = malloc(datalen)) == NULL)
if (imsg->hdr.flags & IMSGF_HASFD)
imsg->fd = imsg_get_fd(ibuf);
imsg->fd = -1;
memcpy(imsg->data, ibuf->r.rptr, datalen);
if (imsg->hdr.len < av) {
left = av - imsg->hdr.len;
memmove(&ibuf->r.buf, ibuf->r.buf + imsg->hdr.len, left);
imsg_free(struct imsg *imsg)
free(imsg->data);
void imsg_free(struct imsg *);
ssize_t imsg_get(struct imsgbuf *, struct imsg *);
struct imsg imsg;
if ((n = imsg_get(ibuf, &imsg)) == -1)
switch (imsg.hdr.type) {
if (idm->idm_id == imsg.hdr.peerid)
dlen = imsg.hdr.len - IMSG_HEADER_SIZE;
data = (u_char *)imsg.data;
imsg_free(&imsg);
struct imsg imsg;
if ((n = imsg_get(ibuf, &imsg)) == -1)
switch (imsg.hdr.type) {
memcpy(¶ms, imsg.data, sizeof(params));
memcpy(idm, imsg.data, sizeof(*idm));
imsg.hdr.type);
imsg_free(&imsg);
struct imsg imsg;
if ((n = imsg_get(ibuf, &imsg)) == -1)
switch (imsg.hdr.type) {
(void)memcpy(&ir, imsg.data, sizeof(ir));
(void)memcpy(&ir, imsg.data, sizeof(ir));
imsg.hdr.type);
imsg_free(&imsg);
struct imsg imsg;
if ((n = imsg_get(ibuf, &imsg)) == -1)
switch (imsg.hdr.type) {
name = imsg.data;
if (imsg.hdr.len < 1 + IMSG_HEADER_SIZE)
imsg.hdr.len -= 1 + IMSG_HEADER_SIZE;
if (name[imsg.hdr.len] != '\0' ||
strlen(name) != imsg.hdr.len)
imsg.hdr.peerid, 0,
imsg_free(&imsg);