From 509535d240506bc35881fe8d254f0bce28aed4c8 Mon Sep 17 00:00:00 2001 From: Lennart Poettering Date: Thu, 29 Jan 2009 03:30:50 +0100 Subject: add new functions pa_dbus_add_matches()/pa_dbus_remove_matches() --- src/modules/dbus-util.c | 57 +++++++++++++++++++++++++++++++++++++++++++++++++ src/modules/dbus-util.h | 3 +++ 2 files changed, 60 insertions(+) (limited to 'src/modules') diff --git a/src/modules/dbus-util.c b/src/modules/dbus-util.c index d2abf087..1fc1e86f 100644 --- a/src/modules/dbus-util.c +++ b/src/modules/dbus-util.c @@ -24,6 +24,8 @@ #include #endif +#include + #include #include #include @@ -325,3 +327,58 @@ pa_dbus_connection* pa_dbus_bus_get(pa_core *c, DBusBusType type, DBusError *err return pconn; } + +int pa_dbus_add_matches(DBusConnection *c, DBusError *error, ...) { + const char *t; + va_list ap; + unsigned k = 0; + + pa_assert(c); + pa_assert(error); + + va_start(ap, error); + while ((t = va_arg(ap, const char*))) { + dbus_bus_add_match(c, t, error); + + if (dbus_error_is_set(error)) + goto fail; + + k++; + } + va_end(ap); + return 0; + +fail: + + va_end(ap); + va_start(ap, error); + for (; k > 0; k--) { + DBusError e; + + pa_assert_se(t = va_arg(ap, const char*)); + + dbus_error_init(&e); + dbus_bus_remove_match(c, t, &e); + dbus_error_free(&e); + } + va_end(ap); + + return -1; +} + +void pa_dbus_remove_matches(DBusConnection *c, ...) { + const char *t; + va_list ap; + DBusError error; + + pa_assert(c); + + dbus_error_init(&error); + + va_start(ap, c); + while ((t = va_arg(ap, const char*))) { + dbus_bus_remove_match(c, t, &error); + dbus_error_free(&error); + } + va_end(ap); +} diff --git a/src/modules/dbus-util.h b/src/modules/dbus-util.h index c4794dac..0ab87809 100644 --- a/src/modules/dbus-util.h +++ b/src/modules/dbus-util.h @@ -37,4 +37,7 @@ DBusConnection* pa_dbus_connection_get(pa_dbus_connection *conn); pa_dbus_connection* pa_dbus_connection_ref(pa_dbus_connection *conn); void pa_dbus_connection_unref(pa_dbus_connection *conn); +int pa_dbus_add_matches(DBusConnection *c, DBusError *error, ...) PA_GCC_SENTINEL; +void pa_dbus_remove_matches(DBusConnection *c, ...) PA_GCC_SENTINEL; + #endif -- cgit