chiark / gitweb /
bus-driverd: Fix return code in driver_request_name
authorLukasz Skalski <l.skalski@partner.samsung.com>
Tue, 17 Dec 2013 16:31:46 +0000 (17:31 +0100)
committerLennart Poettering <lennart@poettering.net>
Tue, 17 Dec 2013 19:37:24 +0000 (20:37 +0100)
RequestName return codes should be consistent with Dbus Specification.

VALUE - DESCRIPTION
1-The caller is now the primary owner of the name, replacing any previous owner,
2-The name already had an owner (QUEUE flag was not specified),
3-The name already has an owner (QUEUE flag was specified),
4-Application trying to request ownership of a name is already the owner of it.

src/bus-driverd/bus-driverd.c

index 11bd2f9..a1ad050 100644 (file)
@@ -348,10 +348,19 @@ static int driver_request_name(sd_bus *bus, sd_bus_message *m, void *userdata, s
         cmd_name->id = id;
 
         r = ioctl(sd_bus_get_fd(bus), KDBUS_CMD_NAME_ACQUIRE, cmd_name);
-        if (r < 0)
-                return r;
+        if (r < 0) {
+                if (errno == EEXIST)
+                        return sd_bus_reply_method_return(m, "u", BUS_NAME_EXISTS);
+                else if (errno == EALREADY)
+                        return sd_bus_reply_method_return(m, "u", BUS_NAME_ALREADY_OWNER);
+                else
+                        return sd_bus_reply_method_return(m, "u", -errno);
+        }
+
+        if (cmd_name->flags & KDBUS_NAME_IN_QUEUE)
+                return sd_bus_reply_method_return(m, "u", BUS_NAME_IN_QUEUE);
 
-        return sd_bus_reply_method_return(m, "u", 0);
+        return sd_bus_reply_method_return(m, "u", BUS_NAME_PRIMARY_OWNER);
 }
 
 static int driver_start_service_by_name(sd_bus *bus, sd_bus_message *m, void *userdata, sd_bus_error *error) {