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>
This commit is contained in:
Szabolcs Nagy 2016-04-24 17:39:02 +02:00 committed by Denys Vlasenko
parent cbdff15bb7
commit 4ab372d49a

View File

@ -71,11 +71,15 @@ int FAST_FUNC rtnl_dump_request(struct rtnl_handle *rth, int type, void *req, in
struct nlmsghdr nlh; struct nlmsghdr nlh;
struct sockaddr_nl nladdr; struct sockaddr_nl nladdr;
struct iovec iov[2] = { { &nlh, sizeof(nlh) }, { req, len } }; struct iovec iov[2] = { { &nlh, sizeof(nlh) }, { req, len } };
/* Use designated initializers, struct layout is non-portable */
struct msghdr msg = { struct msghdr msg = {
(void*)&nladdr, sizeof(nladdr), .msg_name = (void*)&nladdr,
iov, 2, .msg_namelen = sizeof(nladdr),
NULL, 0, .msg_iov = iov,
0 .msg_iovlen = 2,
.msg_control = NULL,
.msg_controllen = 0,
.msg_flags = 0
}; };
memset(&nladdr, 0, sizeof(nladdr)); memset(&nladdr, 0, sizeof(nladdr));
@ -104,12 +108,15 @@ static int rtnl_dump_filter(struct rtnl_handle *rth,
while (1) { while (1) {
int status; int status;
struct nlmsghdr *h; struct nlmsghdr *h;
/* Use designated initializers, struct layout is non-portable */
struct msghdr msg = { struct msghdr msg = {
(void*)&nladdr, sizeof(nladdr), .msg_name = (void*)&nladdr,
&iov, 1, .msg_namelen = sizeof(nladdr),
NULL, 0, .msg_iov = &iov,
0 .msg_iovlen = 1,
.msg_control = NULL,
.msg_controllen = 0,
.msg_flags = 0
}; };
status = recvmsg(rth->fd, &msg, 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 sockaddr_nl nladdr;
struct iovec iov = { (void*)n, n->nlmsg_len }; struct iovec iov = { (void*)n, n->nlmsg_len };
char *buf = xmalloc(8*1024); /* avoid big stack buffer */ char *buf = xmalloc(8*1024); /* avoid big stack buffer */
/* Use designated initializers, struct layout is non-portable */
struct msghdr msg = { struct msghdr msg = {
(void*)&nladdr, sizeof(nladdr), .msg_name = (void*)&nladdr,
&iov, 1, .msg_namelen = sizeof(nladdr),
NULL, 0, .msg_iov = &iov,
0 .msg_iovlen = 1,
.msg_control = NULL,
.msg_controllen = 0,
.msg_flags = 0
}; };
memset(&nladdr, 0, sizeof(nladdr)); memset(&nladdr, 0, sizeof(nladdr));