From: Lennart Poettering Date: Mon, 4 Nov 2013 23:50:34 +0000 (+0100) Subject: bus: make it easy to serialize C99 bools and uids/gids/pids via vtable properties X-Git-Tag: v209~1665 X-Git-Url: http://www.chiark.greenend.org.uk/ucgi/~ianmdlvl/git?p=elogind.git;a=commitdiff_plain;h=e65040306900e36aaa84b52428be3490bf107850 bus: make it easy to serialize C99 bools and uids/gids/pids via vtable properties --- diff --git a/src/libsystemd-bus/bus-util.c b/src/libsystemd-bus/bus-util.c index bb5dd29a5..ad1cb1a6d 100644 --- a/src/libsystemd-bus/bus-util.c +++ b/src/libsystemd-bus/bus-util.c @@ -789,3 +789,33 @@ int bus_open_transport(BusTransport transport, const char *host, bool user, sd_b return r; } + +int bus_property_get_bool( + sd_bus *bus, + const char *path, + const char *interface, + const char *property, + sd_bus_message *reply, + sd_bus_error *error, + void *userdata) { + + int b = *(bool*) userdata; + + return sd_bus_message_append_basic(reply, 'b', &b); +} + +int bus_property_get_uid( + sd_bus *bus, + const char *path, + const char *interface, + const char *property, + sd_bus_message *reply, + sd_bus_error *error, + void *userdata) { + + assert_cc(sizeof(uint32_t) == sizeof(uid_t)); + assert_cc(sizeof(uint32_t) == sizeof(gid_t)); + assert_cc(sizeof(uint32_t) == sizeof(pid_t)); + + return sd_bus_message_append_basic(reply, 'u', userdata); +} diff --git a/src/libsystemd-bus/bus-util.h b/src/libsystemd-bus/bus-util.h index ddb926498..b05cac11f 100644 --- a/src/libsystemd-bus/bus-util.h +++ b/src/libsystemd-bus/bus-util.h @@ -62,6 +62,12 @@ int bus_open_transport(BusTransport transport, const char *host, bool user, sd_b int bus_generic_print_property(const char *name, sd_bus_message *property, bool all); +int bus_property_get_bool(sd_bus *bus, const char *path, const char *interface, const char *property, sd_bus_message *reply, sd_bus_error *error, void *userdata); +int bus_property_get_uid(sd_bus *bus, const char *path, const char *interface, const char *property, sd_bus_message *reply, sd_bus_error *error, void *userdata); + +#define bus_property_get_gid bus_property_get_uid +#define bus_property_get_pid bus_property_get_uid + DEFINE_TRIVIAL_CLEANUP_FUNC(sd_bus*, sd_bus_unref); DEFINE_TRIVIAL_CLEANUP_FUNC(sd_bus_message*, sd_bus_message_unref);