708deb9
From b49ffb29ed902f173852707652b3e3c9c303cebb Mon Sep 17 00:00:00 2001
708deb9
From: Thomas Hindoe Paaboel Andersen <phomes@gmail.com>
708deb9
Date: Mon, 15 Sep 2014 22:36:43 +0200
708deb9
Subject: [PATCH] sd-bus: sd_bus_message_get_errno should only return positive
708deb9
 errno
708deb9
708deb9
sd_bus_message_get_errno can currently return either a number of
708deb9
different poitive errno values (from bus-error-mapping), or a negative
708deb9
EINVAL if passed null as parameter.
708deb9
708deb9
The check for null parameter was introduced in 40ca29a1370379d43e44c0ed425eecc7218dcbca
708deb9
at the same as the function was renamed from bus_message_to_errno and
708deb9
made public API. Before becoming public the function used to return
708deb9
only negative values.
708deb9
708deb9
It is weird to have a function return both positive and negative errno
708deb9
and it generally looks like a mistake. The function is guarded by the
708deb9
--enable-kdbus flags so I wonder if we still have time to fix it up?
708deb9
It does not have any documentation yet. However, except for a few details
708deb9
it is just a convenient way to call sd_bus_error_get_errno which is documented
708deb9
to return only positive errno.
708deb9
708deb9
This patch makes it return only positive errno and fixes up the two
708deb9
calls to the function that tried to cope with both positive and negative
708deb9
values.
708deb9
---
708deb9
 src/libsystemd/sd-bus/bus-message.c | 2 +-
708deb9
 src/libsystemd/sd-bus/sd-bus.c      | 2 --
708deb9
 src/network/networkd-link.c         | 2 --
708deb9
 3 files changed, 1 insertion(+), 5 deletions(-)
708deb9
708deb9
diff --git a/src/libsystemd/sd-bus/bus-message.c b/src/libsystemd/sd-bus/bus-message.c
708deb9
index bfb14fcce6..1fa3ad2611 100644
708deb9
--- a/src/libsystemd/sd-bus/bus-message.c
708deb9
+++ b/src/libsystemd/sd-bus/bus-message.c
708deb9
@@ -5337,7 +5337,7 @@ int bus_header_message_size(struct bus_header *h, size_t *sum) {
708deb9
 }
708deb9
 
708deb9
 _public_ int sd_bus_message_get_errno(sd_bus_message *m) {
708deb9
-        assert_return(m, -EINVAL);
708deb9
+        assert_return(m, EINVAL);
708deb9
 
708deb9
         if (m->header->type != SD_BUS_MESSAGE_METHOD_ERROR)
708deb9
                 return 0;
708deb9
diff --git a/src/libsystemd/sd-bus/sd-bus.c b/src/libsystemd/sd-bus/sd-bus.c
708deb9
index 33b65aba72..28b993b7ba 100644
708deb9
--- a/src/libsystemd/sd-bus/sd-bus.c
708deb9
+++ b/src/libsystemd/sd-bus/sd-bus.c
708deb9
@@ -349,8 +349,6 @@ static int hello_callback(sd_bus *bus, sd_bus_message *reply, void *userdata, sd
708deb9
         assert(reply);
708deb9
 
708deb9
         r = sd_bus_message_get_errno(reply);
708deb9
-        if (r < 0)
708deb9
-                return r;
708deb9
         if (r > 0)
708deb9
                 return -r;
708deb9
 
708deb9
diff --git a/src/network/networkd-link.c b/src/network/networkd-link.c
708deb9
index 9bf1a811c9..427f6953c5 100644
708deb9
--- a/src/network/networkd-link.c
708deb9
+++ b/src/network/networkd-link.c
708deb9
@@ -725,8 +725,6 @@ static int set_hostname_handler(sd_bus *bus, sd_bus_message *m, void *userdata,
708deb9
                 return 1;
708deb9
 
708deb9
         r = sd_bus_message_get_errno(m);
708deb9
-        if (r < 0)
708deb9
-                r = -r;
708deb9
         if (r > 0)
708deb9
                 log_warning_link(link, "Could not set hostname: %s",
708deb9
                                  strerror(r));