if (control_stop(&ctx) == -1)
logger(&ctx, LOG_ERR, "control_stop: %m:");
eloop_free(ctx.eloop);
- free(ctx.iov.iov_base);
+ free(ctx.iov[0].iov_base);
if (ctx.options & DHCPCD_STARTED && !(ctx.options & DHCPCD_FORKED))
logger(&ctx, LOG_INFO, PACKAGE " exited");
int link_fd;
int seq; /* route message sequence no */
int sseq; /* successful seq no sent */
- struct iovec iov; /* generic iovec buffer */
+ struct iovec iov[1]; /* generic iovec buffer */
#ifdef USE_SIGNALS
sigset_t sigset;
ssize_t bytes;
memset(&msg, 0, sizeof(msg));
- msg.msg_iov = &ctx->iov;
+ msg.msg_iov = ctx->iov;
msg.msg_iovlen = 1;
if ((bytes = recvmsg_realloc(ctx->link_fd, &msg, 0)) == -1)
return -1;
- if_dispatch(ctx, ctx->iov.iov_base);
+ if_dispatch(ctx, ctx->iov[0].iov_base);
return 0;
}
struct priv {
int route_fd;
uint32_t route_pid;
- struct iovec link_iov;
+ struct iovec link_iov[1];
};
/* Broadcast address for IPoIB */
if (getsockname(priv->route_fd, (struct sockaddr *)&snl, &len) == -1)
return -1;
priv->route_pid = snl.nl_pid;
- priv->link_iov.iov_base = NULL;
- priv->link_iov.iov_len = 0;
return 0;
}
if (ctx->priv != NULL) {
priv = (struct priv *)ctx->priv;
- free(priv->link_iov.iov_base);
+ free(priv->link_iov[0].iov_base);
close(priv->route_fd);
}
}
struct priv *priv;
priv = (struct priv *)ctx->priv;
- return get_netlink(ctx, &priv->link_iov, NULL,
+ return get_netlink(ctx, priv->link_iov, NULL,
ctx->link_fd, MSG_DONTWAIT, &link_netlink);
}
hdr->nlmsg_seq = (uint32_t)++ctx->seq;
if (sendmsg(s, &msg, 0) != -1) {
ctx->sseq = ctx->seq;
- r = get_netlink(ctx, &ctx->iov, ifp, s, 0, callback);
+ r = get_netlink(ctx, ctx->iov, ifp, s, 0, callback);
} else
r = -1;
if (protocol != NETLINK_ROUTE)
ssize_t bytes;
memset(&msg, 0, sizeof(msg));
- msg.msg_iov = &ctx->iov;
+ msg.msg_iov = ctx->iov;
msg.msg_iovlen = 1;
if ((bytes = recvmsg_realloc(ctx->link_fd, &msg, 0)) == -1)
return -1;
- if_dispatch(ctx, ctx->iov.iov_base);
+ if_dispatch(ctx, ctx->iov[0].iov_base);
return 0;
}