mirror of
https://github.com/systemd/systemd.git
synced 2024-11-08 11:27:32 +03:00
Merge pull request #1024 from poettering/sd-bus-explicit
sd-bus: introduce new SD_BUS_VTABLE_PROPERTY_EXPLICIT flag
This commit is contained in:
commit
5f92c3ada6
@ -81,6 +81,9 @@ static void introspect_write_flags(struct introspect *i, int type, int flags) {
|
||||
fputs(" <annotation name=\"org.freedesktop.DBus.Method.NoReply\" value=\"true\"/>\n", i->f);
|
||||
|
||||
if (type == _SD_BUS_VTABLE_PROPERTY || type == _SD_BUS_VTABLE_WRITABLE_PROPERTY) {
|
||||
if (flags & SD_BUS_VTABLE_PROPERTY_EXPLICIT)
|
||||
fputs(" <annotation name=\"org.freedesktop.systemd1.Explicit\" value=\"true\"/>\n", i->f);
|
||||
|
||||
if (flags & SD_BUS_VTABLE_PROPERTY_CONST)
|
||||
fputs(" <annotation name=\"org.freedesktop.DBus.Property.EmitsChangedSignal\" value=\"const\"/>\n", i->f);
|
||||
else if (flags & SD_BUS_VTABLE_PROPERTY_EMITS_INVALIDATION)
|
||||
|
@ -749,6 +749,9 @@ static int vtable_append_all_properties(
|
||||
if (v->flags & SD_BUS_VTABLE_HIDDEN)
|
||||
continue;
|
||||
|
||||
if (v->flags & SD_BUS_VTABLE_PROPERTY_EXPLICIT)
|
||||
continue;
|
||||
|
||||
r = vtable_append_one_property(bus, reply, path, c, v, userdata, error);
|
||||
if (r < 0)
|
||||
return r;
|
||||
@ -1740,8 +1743,9 @@ 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]) || streq(v->x.property.signature, "as")) ||
|
||||
v->flags & SD_BUS_VTABLE_METHOD_NO_REPLY ||
|
||||
(v->flags & SD_BUS_VTABLE_METHOD_NO_REPLY) ||
|
||||
(!!(v->flags & SD_BUS_VTABLE_PROPERTY_CONST) + !!(v->flags & SD_BUS_VTABLE_PROPERTY_EMITS_CHANGE) + !!(v->flags & SD_BUS_VTABLE_PROPERTY_EMITS_INVALIDATION)) > 1 ||
|
||||
((v->flags & SD_BUS_VTABLE_PROPERTY_EMITS_CHANGE) && (v->flags & SD_BUS_VTABLE_PROPERTY_EXPLICIT)) ||
|
||||
(v->flags & SD_BUS_VTABLE_UNPRIVILEGED && v->type == _SD_BUS_VTABLE_PROPERTY)) {
|
||||
r = -EINVAL;
|
||||
goto fail;
|
||||
|
@ -41,7 +41,7 @@ static const sd_bus_vtable vtable[] = {
|
||||
SD_BUS_PROPERTY("AReadOnlyDeprecatedProperty", "(ut)", prop_get, 0, SD_BUS_VTABLE_DEPRECATED),
|
||||
SD_BUS_PROPERTY("ChangingProperty", "t", prop_get, 0, SD_BUS_VTABLE_PROPERTY_EMITS_CHANGE),
|
||||
SD_BUS_PROPERTY("Invalidating", "t", prop_get, 0, SD_BUS_VTABLE_PROPERTY_EMITS_INVALIDATION),
|
||||
SD_BUS_PROPERTY("Constant", "t", prop_get, 0, SD_BUS_VTABLE_PROPERTY_CONST),
|
||||
SD_BUS_PROPERTY("Constant", "t", prop_get, 0, SD_BUS_VTABLE_PROPERTY_CONST|SD_BUS_VTABLE_PROPERTY_EXPLICIT),
|
||||
SD_BUS_VTABLE_END
|
||||
};
|
||||
|
||||
|
@ -217,6 +217,7 @@ static const sd_bus_vtable vtable2[] = {
|
||||
SD_BUS_PROPERTY("Value2", "s", value_handler, 10, SD_BUS_VTABLE_PROPERTY_EMITS_INVALIDATION),
|
||||
SD_BUS_PROPERTY("Value3", "s", value_handler, 10, SD_BUS_VTABLE_PROPERTY_CONST),
|
||||
SD_BUS_PROPERTY("Value4", "s", value_handler, 10, 0),
|
||||
SD_BUS_PROPERTY("AnExplicitProperty", "s", NULL, offsetof(struct context, something), SD_BUS_VTABLE_PROPERTY_EXPLICIT|SD_BUS_VTABLE_PROPERTY_EMITS_INVALIDATION),
|
||||
SD_BUS_VTABLE_END
|
||||
};
|
||||
|
||||
|
@ -47,6 +47,7 @@ enum {
|
||||
SD_BUS_VTABLE_PROPERTY_CONST = 1ULL << 4,
|
||||
SD_BUS_VTABLE_PROPERTY_EMITS_CHANGE = 1ULL << 5,
|
||||
SD_BUS_VTABLE_PROPERTY_EMITS_INVALIDATION = 1ULL << 6,
|
||||
SD_BUS_VTABLE_PROPERTY_EXPLICIT = 1ULL << 7,
|
||||
_SD_BUS_VTABLE_CAPABILITY_MASK = 0xFFFFULL << 40
|
||||
};
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user