diff options
author | David Herrmann <dh.herrmann@gmail.com> | 2013-10-22 00:28:07 +0200 |
---|---|---|
committer | Kristian Høgsberg <krh@bitplanet.net> | 2013-10-21 16:07:10 -0700 |
commit | 814d49f0b4998e4f9d2aa89741ad8acd699d706b (patch) | |
tree | 69cc05022f342d1cac68449641d457af632214ad /src/dbus.c | |
parent | 59ab90049f54a8371cf3ab14057f6a513b0cc7ea (diff) | |
download | weston-814d49f0b4998e4f9d2aa89741ad8acd699d706b.tar.gz |
dbus: add dbus-match helpers
These helpers simplify adding dbus-matches by allowing var-arg arguments
to assemble the matching rules.
Diffstat (limited to 'src/dbus.c')
-rw-r--r-- | src/dbus.c | 68 |
1 files changed, 68 insertions, 0 deletions
@@ -334,3 +334,71 @@ void weston_dbus_close(DBusConnection *c, struct wl_event_source *ctx) dbus_connection_close(c); dbus_connection_unref(c); } + +int weston_dbus_add_match(DBusConnection *c, const char *format, ...) +{ + DBusError err; + int r; + va_list list; + char *str; + + va_start(list, format); + r = vasprintf(&str, format, list); + va_end(list); + + if (r < 0) + return -ENOMEM; + + dbus_error_init(&err); + dbus_bus_add_match(c, str, &err); + free(str); + if (dbus_error_is_set(&err)) { + dbus_error_free(&err); + return -EIO; + } + + return 0; +} + +int weston_dbus_add_match_signal(DBusConnection *c, const char *sender, + const char *iface, const char *member, + const char *path) +{ + return weston_dbus_add_match(c, + "type='signal'," + "sender='%s'," + "interface='%s'," + "member='%s'," + "path='%s'", + sender, iface, member, path); +} + +void weston_dbus_remove_match(DBusConnection *c, const char *format, ...) +{ + int r; + va_list list; + char *str; + + va_start(list, format); + r = vasprintf(&str, format, list); + va_end(list); + + if (r < 0) + return; + + dbus_bus_remove_match(c, str, NULL); + free(str); +} + +void weston_dbus_remove_match_signal(DBusConnection *c, const char *sender, + const char *iface, const char *member, + const char *path) +{ + return weston_dbus_remove_match(c, + "type='signal'," + "sender='%s'," + "interface='%s'," + "member='%s'," + "path='%s'", + sender, iface, member, path); +} |