diff options
author | Lennart Poettering <lennart@poettering.net> | 2013-11-05 00:49:50 +0100 |
---|---|---|
committer | Lennart Poettering <lennart@poettering.net> | 2013-11-05 01:13:05 +0100 |
commit | c13c7de3bf419db3ae93a9acd2d95a5a19e408ed (patch) | |
tree | 6eb57c3312a1f00a12deb3ee79fa6f460d5b8dc9 | |
parent | c9b6cb28c35e18649575b82466d7d6eb29aa5196 (diff) |
bus: support implicit serialization of strv string arrays within vtables
-rw-r--r-- | src/libsystemd-bus/bus-objects.c | 12 |
1 files changed, 5 insertions, 7 deletions
diff --git a/src/libsystemd-bus/bus-objects.c b/src/libsystemd-bus/bus-objects.c index 05d0015902..92781e9adc 100644 --- a/src/libsystemd-bus/bus-objects.c +++ b/src/libsystemd-bus/bus-objects.c @@ -312,7 +312,6 @@ static int invoke_property_get( sd_bus_error *error, void *userdata) { - int r; const void *p; assert(bus); @@ -327,6 +326,9 @@ static int invoke_property_get( /* Automatic handling if no callback is defined. */ + if (streq(v->x.property.signature, "as")) + return sd_bus_message_append_strv(m, *(char***) userdata); + assert(signature_is_single(v->x.property.signature, false)); assert(bus_type_is_basic(v->x.property.signature[0])); @@ -347,11 +349,7 @@ static int invoke_property_get( break; } - r = sd_bus_message_append_basic(m, v->x.property.signature[0], p); - if (r < 0) - return r; - - return 1; + return sd_bus_message_append_basic(m, v->x.property.signature[0], p); } static int invoke_property_set( @@ -1587,7 +1585,7 @@ static int add_object_vtable_internal( if (!member_name_is_valid(v->x.property.member) || !signature_is_single(v->x.property.signature, false) || - !(v->x.property.get || bus_type_is_basic(v->x.property.signature[0])) || + !(v->x.property.get || bus_type_is_basic(v->x.property.signature[0]) || streq(v->x.property.signature, "as")) || v->flags & SD_BUS_VTABLE_METHOD_NO_REPLY || (v->flags & SD_BUS_VTABLE_PROPERTY_INVALIDATE_ONLY && !(v->flags & SD_BUS_VTABLE_PROPERTY_EMITS_CHANGE))) { r = -EINVAL; |