| From 4ab372d49a6e82b0bf097dedb96d26330c5f2d5f Mon Sep 17 00:00:00 2001 |
| From: Szabolcs Nagy <nsz@port70.net> |
| Date: Sun, 24 Apr 2016 17:39:02 +0200 |
| Subject: [PATCH] ip: fix problem on mips64 n64 big endian musl systems |
| |
| Use designated initializers for struct msghdr. |
| The struct layout is non-portable and musl libc does not match what busybox expects. |
| |
| Signed-off-by: Szabolcs Nagy <nsz@port70.net> |
| Tested-by: Waldemar Brodkorb <wbx@openadk.org> |
| Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com> |
| |
| Upstream-Status: Backport |
| |
| https://git.busybox.net/busybox/commit/?id=4ab372d49a6e82b0bf097dedb96d26330c5f2d5f |
| |
| Signed-off-by: Armin Kuster <akuster@mvista.com> |
| |
| --- |
| networking/libiproute/libnetlink.c | 37 ++++++++++++++++++++++++------------- |
| 1 file changed, 24 insertions(+), 13 deletions(-) |
| |
| diff --git a/networking/libiproute/libnetlink.c b/networking/libiproute/libnetlink.c |
| index c7533a4..cbb5daf 100644 |
| --- a/networking/libiproute/libnetlink.c |
| +++ b/networking/libiproute/libnetlink.c |
| @@ -71,11 +71,15 @@ int FAST_FUNC rtnl_dump_request(struct rtnl_handle *rth, int type, void *req, in |
| struct nlmsghdr nlh; |
| struct sockaddr_nl nladdr; |
| struct iovec iov[2] = { { &nlh, sizeof(nlh) }, { req, len } }; |
| + /* Use designated initializers, struct layout is non-portable */ |
| struct msghdr msg = { |
| - (void*)&nladdr, sizeof(nladdr), |
| - iov, 2, |
| - NULL, 0, |
| - 0 |
| + .msg_name = (void*)&nladdr, |
| + .msg_namelen = sizeof(nladdr), |
| + .msg_iov = iov, |
| + .msg_iovlen = 2, |
| + .msg_control = NULL, |
| + .msg_controllen = 0, |
| + .msg_flags = 0 |
| }; |
| |
| memset(&nladdr, 0, sizeof(nladdr)); |
| @@ -104,12 +108,15 @@ static int rtnl_dump_filter(struct rtnl_handle *rth, |
| while (1) { |
| int status; |
| struct nlmsghdr *h; |
| - |
| + /* Use designated initializers, struct layout is non-portable */ |
| struct msghdr msg = { |
| - (void*)&nladdr, sizeof(nladdr), |
| - &iov, 1, |
| - NULL, 0, |
| - 0 |
| + .msg_name = (void*)&nladdr, |
| + .msg_namelen = sizeof(nladdr), |
| + .msg_iov = &iov, |
| + .msg_iovlen = 1, |
| + .msg_control = NULL, |
| + .msg_controllen = 0, |
| + .msg_flags = 0 |
| }; |
| |
| status = recvmsg(rth->fd, &msg, 0); |
| @@ -211,11 +218,15 @@ int FAST_FUNC rtnl_talk(struct rtnl_handle *rtnl, struct nlmsghdr *n, |
| struct sockaddr_nl nladdr; |
| struct iovec iov = { (void*)n, n->nlmsg_len }; |
| char *buf = xmalloc(8*1024); /* avoid big stack buffer */ |
| + /* Use designated initializers, struct layout is non-portable */ |
| struct msghdr msg = { |
| - (void*)&nladdr, sizeof(nladdr), |
| - &iov, 1, |
| - NULL, 0, |
| - 0 |
| + .msg_name = (void*)&nladdr, |
| + .msg_namelen = sizeof(nladdr), |
| + .msg_iov = &iov, |
| + .msg_iovlen = 1, |
| + .msg_control = NULL, |
| + .msg_controllen = 0, |
| + .msg_flags = 0 |
| }; |
| |
| memset(&nladdr, 0, sizeof(nladdr)); |
| -- |
| 2.3.5 |
| |