* [PATCH] iproute: Fix errno propagation from rtnl_talk
@ 2012-08-20 8:08 Pavel Emelyanov
2012-08-20 19:55 ` Stephen Hemminger
0 siblings, 1 reply; 2+ messages in thread
From: Pavel Emelyanov @ 2012-08-20 8:08 UTC (permalink / raw)
To: Stephen Hemminger, Linux Netdev List
Callers of rtnl_talk check errno value for their needs. In particular, the addrs
and routes restoring code validly reports success if the EEXISTS is in there.
However, the errno value can be sometimes screwed up by the perror call. Thus
we should only set it _after_ the message was emitted.
Signed-off-by: Pavel Emelyanov <xemul@parallels.com>
---
diff --git a/lib/libnetlink.c b/lib/libnetlink.c
index 878911e..8e8c8b9 100644
--- a/lib/libnetlink.c
+++ b/lib/libnetlink.c
@@ -360,13 +360,14 @@ int rtnl_talk(struct rtnl_handle *rtnl, struct nlmsghdr *n, pid_t peer,
if (l < sizeof(struct nlmsgerr)) {
fprintf(stderr, "ERROR truncated\n");
} else {
- errno = -err->error;
- if (errno == 0) {
+ if (!err->error) {
if (answer)
memcpy(answer, h, h->nlmsg_len);
return 0;
}
- perror("RTNETLINK answers");
+
+ fprintf(stderr, "RTNETLINK answers: %s\n", strerror(-err->error));
+ errno = -err->error;
}
return -1;
}
^ permalink raw reply related [flat|nested] 2+ messages in thread
* Re: [PATCH] iproute: Fix errno propagation from rtnl_talk
2012-08-20 8:08 [PATCH] iproute: Fix errno propagation from rtnl_talk Pavel Emelyanov
@ 2012-08-20 19:55 ` Stephen Hemminger
0 siblings, 0 replies; 2+ messages in thread
From: Stephen Hemminger @ 2012-08-20 19:55 UTC (permalink / raw)
To: Pavel Emelyanov; +Cc: Stephen Hemminger, Linux Netdev List
On Mon, 20 Aug 2012 12:08:40 +0400
Pavel Emelyanov <xemul@parallels.com> wrote:
> Callers of rtnl_talk check errno value for their needs. In particular, the addrs
> and routes restoring code validly reports success if the EEXISTS is in there.
>
> However, the errno value can be sometimes screwed up by the perror call. Thus
> we should only set it _after_ the message was emitted.
>
> Signed-off-by: Pavel Emelyanov <xemul@parallels.com>
>
> ---
>
> diff --git a/lib/libnetlink.c b/lib/libnetlink.c
> index 878911e..8e8c8b9 100644
> --- a/lib/libnetlink.c
> +++ b/lib/libnetlink.c
> @@ -360,13 +360,14 @@ int rtnl_talk(struct rtnl_handle *rtnl, struct nlmsghdr *n, pid_t peer,
> if (l < sizeof(struct nlmsgerr)) {
> fprintf(stderr, "ERROR truncated\n");
> } else {
> - errno = -err->error;
> - if (errno == 0) {
> + if (!err->error) {
> if (answer)
> memcpy(answer, h, h->nlmsg_len);
> return 0;
> }
> - perror("RTNETLINK answers");
> +
> + fprintf(stderr, "RTNETLINK answers: %s\n", strerror(-err->error));
> + errno = -err->error;
> }
> return -1;
> }
Applied
^ permalink raw reply [flat|nested] 2+ messages in thread
end of thread, other threads:[~2012-08-20 19:55 UTC | newest]
Thread overview: 2+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2012-08-20 8:08 [PATCH] iproute: Fix errno propagation from rtnl_talk Pavel Emelyanov
2012-08-20 19:55 ` Stephen Hemminger
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).