diff options
author | Lennart Poettering <lennart@poettering.net> | 2013-12-10 16:49:00 +0000 |
---|---|---|
committer | Lennart Poettering <lennart@poettering.net> | 2013-12-10 16:52:49 +0000 |
commit | 6e8df5f00a3874decf1e5542da3d65b25f6da1dc (patch) | |
tree | 8e06c5c861ab26d62677b1ceb0fd10e0b9f0c0e4 | |
parent | adacb9575a09981fcf11279f2f661e3fc21e58ff (diff) |
bus: introduce new SD_BUS_VTABLE_HIDDEN flag for vtable members
When this flag is set then its member will not be shown in the
introspection data. Also, properties with this flag set will not be
included in GetAll() responses.
-rw-r--r-- | src/libsystemd-bus/bus-introspect.c | 3 | ||||
-rw-r--r-- | src/libsystemd-bus/bus-objects.c | 9 | ||||
-rw-r--r-- | src/systemd/sd-bus-vtable.h | 1 |
3 files changed, 13 insertions, 0 deletions
diff --git a/src/libsystemd-bus/bus-introspect.c b/src/libsystemd-bus/bus-introspect.c index 8bec017d63..504fab1b4b 100644 --- a/src/libsystemd-bus/bus-introspect.c +++ b/src/libsystemd-bus/bus-introspect.c @@ -121,6 +121,9 @@ int introspect_write_interface(struct introspect *i, const sd_bus_vtable *v) { for (; v->type != _SD_BUS_VTABLE_END; v++) { + if (v->type != _SD_BUS_VTABLE_START && (v->flags & SD_BUS_VTABLE_HIDDEN)) + continue; + switch (v->type) { case _SD_BUS_VTABLE_START: diff --git a/src/libsystemd-bus/bus-objects.c b/src/libsystemd-bus/bus-objects.c index 941c2810d8..8ffda2f95d 100644 --- a/src/libsystemd-bus/bus-objects.c +++ b/src/libsystemd-bus/bus-objects.c @@ -633,10 +633,16 @@ static int vtable_append_all_properties( assert(path); assert(c); + if (c->vtable[0].flags & SD_BUS_VTABLE_HIDDEN) + return 1; + for (v = c->vtable+1; v->type != _SD_BUS_VTABLE_END; v++) { if (v->type != _SD_BUS_VTABLE_PROPERTY && v->type != _SD_BUS_VTABLE_WRITABLE_PROPERTY) continue; + if (v->flags & SD_BUS_VTABLE_HIDDEN) + continue; + r = sd_bus_message_open_container(reply, 'e', "sv"); if (r < 0) return r; @@ -853,6 +859,9 @@ static int process_introspect( empty = false; + if (c->vtable[0].flags & SD_BUS_VTABLE_HIDDEN) + continue; + if (!streq_ptr(previous_interface, c->interface)) { if (previous_interface) diff --git a/src/systemd/sd-bus-vtable.h b/src/systemd/sd-bus-vtable.h index e6e0a72f8a..5400e9a661 100644 --- a/src/systemd/sd-bus-vtable.h +++ b/src/systemd/sd-bus-vtable.h @@ -46,6 +46,7 @@ enum { SD_BUS_VTABLE_PROPERTY_EMITS_CHANGE = 1ULL << 2, SD_BUS_VTABLE_PROPERTY_INVALIDATE_ONLY = 1ULL << 3, SD_BUS_VTABLE_UNPRIVILEGED = 1ULL << 4, + SD_BUS_VTABLE_HIDDEN = 1ULL << 5, _SD_BUS_VTABLE_CAPABILITY_MASK = 0xFFFFULL << 40 }; |