sd_bus_error *error,
void *userdata) {
- int r;
const void *p;
assert(bus);
/* 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]));
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(
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");
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;
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;
}