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);
|
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 (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)
|
if (flags & SD_BUS_VTABLE_PROPERTY_CONST)
|
||||||
fputs(" <annotation name=\"org.freedesktop.DBus.Property.EmitsChangedSignal\" value=\"const\"/>\n", i->f);
|
fputs(" <annotation name=\"org.freedesktop.DBus.Property.EmitsChangedSignal\" value=\"const\"/>\n", i->f);
|
||||||
else if (flags & SD_BUS_VTABLE_PROPERTY_EMITS_INVALIDATION)
|
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)
|
if (v->flags & SD_BUS_VTABLE_HIDDEN)
|
||||||
continue;
|
continue;
|
||||||
|
|
||||||
|
if (v->flags & SD_BUS_VTABLE_PROPERTY_EXPLICIT)
|
||||||
|
continue;
|
||||||
|
|
||||||
r = vtable_append_one_property(bus, reply, path, c, v, userdata, error);
|
r = vtable_append_one_property(bus, reply, path, c, v, userdata, error);
|
||||||
if (r < 0)
|
if (r < 0)
|
||||||
return r;
|
return r;
|
||||||
@ -1740,8 +1743,9 @@ static int add_object_vtable_internal(
|
|||||||
if (!member_name_is_valid(v->x.property.member) ||
|
if (!member_name_is_valid(v->x.property.member) ||
|
||||||
!signature_is_single(v->x.property.signature, false) ||
|
!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->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_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)) {
|
(v->flags & SD_BUS_VTABLE_UNPRIVILEGED && v->type == _SD_BUS_VTABLE_PROPERTY)) {
|
||||||
r = -EINVAL;
|
r = -EINVAL;
|
||||||
goto fail;
|
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("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("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("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
|
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("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("Value3", "s", value_handler, 10, SD_BUS_VTABLE_PROPERTY_CONST),
|
||||||
SD_BUS_PROPERTY("Value4", "s", value_handler, 10, 0),
|
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
|
SD_BUS_VTABLE_END
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -47,6 +47,7 @@ enum {
|
|||||||
SD_BUS_VTABLE_PROPERTY_CONST = 1ULL << 4,
|
SD_BUS_VTABLE_PROPERTY_CONST = 1ULL << 4,
|
||||||
SD_BUS_VTABLE_PROPERTY_EMITS_CHANGE = 1ULL << 5,
|
SD_BUS_VTABLE_PROPERTY_EMITS_CHANGE = 1ULL << 5,
|
||||||
SD_BUS_VTABLE_PROPERTY_EMITS_INVALIDATION = 1ULL << 6,
|
SD_BUS_VTABLE_PROPERTY_EMITS_INVALIDATION = 1ULL << 6,
|
||||||
|
SD_BUS_VTABLE_PROPERTY_EXPLICIT = 1ULL << 7,
|
||||||
_SD_BUS_VTABLE_CAPABILITY_MASK = 0xFFFFULL << 40
|
_SD_BUS_VTABLE_CAPABILITY_MASK = 0xFFFFULL << 40
|
||||||
};
|
};
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user