diff options
author | Stijn Tintel <stijn@linux-ipv6.be> | 2016-05-10 16:45:35 +0300 |
---|---|---|
committer | Jan Moskyto Matejka <mq@ucw.cz> | 2016-05-10 16:05:16 +0200 |
commit | 31e9e10144a6994773a04d94903fa3bdde6de91e (patch) | |
tree | 6a99ee431124d8d95ad07ac118251f6ffefd0913 /sysdep/linux/netlink.c | |
parent | f7a99acb4eac23223f51ce83b8081cc9695fef1e (diff) |
netlink: update struct msghdr
The netlink code assumes an order for the members of struct msghdr.
This breaks recvmsg and sendmsg with musl libc on mips64. Fix this by
using designated initializers instead.
Signed-off-by: Stijn Tintel <stijn@linux-ipv6.be>
Diffstat (limited to 'sysdep/linux/netlink.c')
-rw-r--r-- | sysdep/linux/netlink.c | 14 |
1 files changed, 12 insertions, 2 deletions
diff --git a/sysdep/linux/netlink.c b/sysdep/linux/netlink.c index 1ffdff07..b42e7b6f 100644 --- a/sysdep/linux/netlink.c +++ b/sysdep/linux/netlink.c @@ -125,7 +125,12 @@ nl_get_reply(struct nl_sock *nl) { struct iovec iov = { nl->rx_buffer, NL_RX_SIZE }; struct sockaddr_nl sa; - struct msghdr m = { (struct sockaddr *) &sa, sizeof(sa), &iov, 1, NULL, 0, 0 }; + struct msghdr m = { + .msg_name = &sa, + .msg_namelen = sizeof(sa), + .msg_iov = &iov, + .msg_iovlen = 1, + }; int x = recvmsg(nl->fd, &m, 0); if (x < 0) die("nl_get_reply: %m"); @@ -1231,7 +1236,12 @@ nl_async_hook(sock *sk, int size UNUSED) { struct iovec iov = { nl_async_rx_buffer, NL_RX_SIZE }; struct sockaddr_nl sa; - struct msghdr m = { (struct sockaddr *) &sa, sizeof(sa), &iov, 1, NULL, 0, 0 }; + struct msghdr m = { + .msg_name = &sa, + .msg_namelen = sizeof(sa), + .msg_iov = &iov, + .msg_iovlen = 1, + }; struct nlmsghdr *h; int x; uint len; |