From patchwork Mon Aug 20 08:08:40 2012 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Pavel Emelyanov X-Patchwork-Id: 178700 X-Patchwork-Delegate: shemminger@vyatta.com Return-Path: X-Original-To: patchwork-incoming@ozlabs.org Delivered-To: patchwork-incoming@ozlabs.org Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by ozlabs.org (Postfix) with ESMTP id 22FCA2C008B for ; Mon, 20 Aug 2012 18:08:53 +1000 (EST) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1751582Ab2HTIIr (ORCPT ); Mon, 20 Aug 2012 04:08:47 -0400 Received: from mailhub.sw.ru ([195.214.232.25]:10947 "EHLO relay.sw.ru" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1752271Ab2HTIIn (ORCPT ); Mon, 20 Aug 2012 04:08:43 -0400 Received: from [10.30.16.117] ([10.30.16.117]) (authenticated bits=0) by relay.sw.ru (8.13.4/8.13.4) with ESMTP id q7K88evM019895 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-SHA bits=256 verify=NO); Mon, 20 Aug 2012 12:08:40 +0400 (MSK) Message-ID: <5031F088.1030404@parallels.com> Date: Mon, 20 Aug 2012 12:08:40 +0400 From: Pavel Emelyanov User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:10.0.1) Gecko/20120209 Thunderbird/10.0.1 MIME-Version: 1.0 To: Stephen Hemminger , Linux Netdev List Subject: [PATCH] iproute: Fix errno propagation from rtnl_talk Sender: netdev-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: netdev@vger.kernel.org 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 --- -- To unsubscribe from this list: send the line "unsubscribe netdev" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html 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; }