Fix bad returned value

In case of error the message will be always truncated.
We check the message was truncated with the total size
received which means the kernel as more info to give.

Signed-off-by: Daniel Lezcano <dlezcano@fr.ibm.com>
This commit is contained in:
Daniel Lezcano 2010-07-23 15:10:38 +02:00
parent 96bcd56ae2
commit e239ff31a5

View File

@ -155,7 +155,8 @@ again:
if (!ret)
return 0;
if (msg.msg_flags & MSG_TRUNC)
if (msg.msg_flags & MSG_TRUNC &&
ret == answer->nlmsghdr.nlmsg_len)
return -EMSGSIZE;
return ret;
@ -182,9 +183,8 @@ extern int netlink_send(struct nl_handler *handler, struct nlmsg *nlmsg)
nladdr.nl_groups = 0;
ret = sendmsg(handler->fd, &msg, 0);
if (ret < 0) {
if (ret < 0)
return -errno;
}
return ret;
}
@ -209,7 +209,7 @@ extern int netlink_transaction(struct nl_handler *handler,
struct nlmsgerr *err = (struct nlmsgerr*)NLMSG_DATA(answer);
return err->error;
}
return 0;
}