summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorLennart Poettering <lennart@poettering.net>2013-11-05 00:49:50 +0100
committerLennart Poettering <lennart@poettering.net>2013-11-05 01:13:05 +0100
commitc13c7de3bf419db3ae93a9acd2d95a5a19e408ed (patch)
tree6eb57c3312a1f00a12deb3ee79fa6f460d5b8dc9 /src
parentc9b6cb28c35e18649575b82466d7d6eb29aa5196 (diff)
bus: support implicit serialization of strv string arrays within vtables
Diffstat (limited to 'src')
-rw-r--r--src/libsystemd-bus/bus-objects.c12
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;