chiark / gitweb /
sd-bus,sd-event: unify error handling of object descriptions
authorLennart Poettering <lennart@poettering.net>
Tue, 4 Nov 2014 15:58:42 +0000 (16:58 +0100)
committerLennart Poettering <lennart@poettering.net>
Tue, 4 Nov 2014 17:09:19 +0000 (18:09 +0100)
a) When getting the description return ENXIO if none is set

b) Allow setting a description to NULL

c) return ECHILD on fork() like for other calls

src/libsystemd/sd-bus/sd-bus.c
src/libsystemd/sd-event/sd-event.c

index ba8d5e60fb4fc8f6f6d79799a0a17b77901e2c13..a3165fb4f743df7b544d22471022e26ffe2abc6d 100644 (file)
@@ -325,7 +325,6 @@ _public_ int sd_bus_set_trusted(sd_bus *bus, int b) {
 
 _public_ int sd_bus_set_description(sd_bus *bus, const char *description) {
         assert_return(bus, -EINVAL);
 
 _public_ int sd_bus_set_description(sd_bus *bus, const char *description) {
         assert_return(bus, -EINVAL);
-        assert_return(description, -EINVAL);
         assert_return(bus->state == BUS_UNSET, -EPERM);
         assert_return(!bus_pid_changed(bus), -ECHILD);
 
         assert_return(bus->state == BUS_UNSET, -EPERM);
         assert_return(!bus_pid_changed(bus), -ECHILD);
 
@@ -3316,6 +3315,7 @@ _public_ int sd_bus_try_close(sd_bus *bus) {
 _public_ int sd_bus_get_description(sd_bus *bus, const char **description) {
         assert_return(bus, -EINVAL);
         assert_return(description, -EINVAL);
 _public_ int sd_bus_get_description(sd_bus *bus, const char **description) {
         assert_return(bus, -EINVAL);
         assert_return(description, -EINVAL);
+        assert_return(bus->description, -ENXIO);
         assert_return(!bus_pid_changed(bus), -ECHILD);
 
         *description = bus->description;
         assert_return(!bus_pid_changed(bus), -ECHILD);
 
         *description = bus->description;
index e856d682514f527df654add8a923b729178b80e3..fb436adc13a971a6bbfebb99caa8cb11f3cb8583 100644 (file)
@@ -1258,6 +1258,7 @@ _public_ sd_event_source* sd_event_source_unref(sd_event_source *s) {
 
 _public_ int sd_event_source_set_description(sd_event_source *s, const char *description) {
         assert_return(s, -EINVAL);
 
 _public_ int sd_event_source_set_description(sd_event_source *s, const char *description) {
         assert_return(s, -EINVAL);
+        assert_return(!event_pid_changed(s->event), -ECHILD);
 
         return free_and_strdup(&s->description, description);
 }
 
         return free_and_strdup(&s->description, description);
 }
@@ -1265,6 +1266,8 @@ _public_ int sd_event_source_set_description(sd_event_source *s, const char *des
 _public_ int sd_event_source_get_description(sd_event_source *s, const char **description) {
         assert_return(s, -EINVAL);
         assert_return(description, -EINVAL);
 _public_ int sd_event_source_get_description(sd_event_source *s, const char **description) {
         assert_return(s, -EINVAL);
         assert_return(description, -EINVAL);
+        assert_return(s->description, -ENXIO);
+        assert_return(!event_pid_changed(s->event), -ECHILD);
 
         *description = s->description;
         return 0;
 
         *description = s->description;
         return 0;