summaryrefslogtreecommitdiffstats
path: root/src/modules
diff options
context:
space:
mode:
authorLennart Poettering <lennart@poettering.net>2009-01-29 03:30:50 +0100
committerLennart Poettering <lennart@poettering.net>2009-01-29 03:30:50 +0100
commit509535d240506bc35881fe8d254f0bce28aed4c8 (patch)
tree69ed1330ffef899b5ac68b4cf8559c44768ddd71 /src/modules
parentdaf0612e372f66d70bc40655e637c00675e1b4c1 (diff)
add new functions pa_dbus_add_matches()/pa_dbus_remove_matches()
Diffstat (limited to 'src/modules')
-rw-r--r--src/modules/dbus-util.c57
-rw-r--r--src/modules/dbus-util.h3
2 files changed, 60 insertions, 0 deletions
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 <config.h>
#endif
+#include <stdarg.h>
+
#include <pulse/xmalloc.h>
#include <pulse/timeval.h>
#include <pulsecore/log.h>
@@ -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