X-Git-Url: http://www.chiark.greenend.org.uk/ucgi/~ianmdlvl/git?p=elogind.git;a=blobdiff_plain;f=src%2Flibsystemd-bus%2Fbus-objects.c;h=92781e9adcc1ef2192c40c4657f9759b03632dd8;hp=aa0be37a9de8061d918e9bbb258c651cd0d252f2;hb=c13c7de3bf419db3ae93a9acd2d95a5a19e408ed;hpb=bd037038840501916aaf8b65a0c3a6e7357d3c74 diff --git a/src/libsystemd-bus/bus-objects.c b/src/libsystemd-bus/bus-objects.c index aa0be37a9..92781e9ad 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( @@ -600,7 +598,7 @@ static int property_get_all_callbacks_run( if (r < 0) return r; - found_interface = + found_interface = !iface || streq(iface, "org.freedesktop.DBus.Properties") || streq(iface, "org.freedesktop.DBus.Peer") || streq(iface, "org.freedesktop.DBus.Introspectable"); @@ -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; @@ -1619,7 +1617,7 @@ static int add_object_vtable_internal( case _SD_BUS_VTABLE_SIGNAL: if (!member_name_is_valid(v->x.signal.member) || - !signature_is_single(strempty(v->x.signal.signature), false)) { + !signature_is_valid(strempty(v->x.signal.signature), false)) { r = -EINVAL; goto fail; }