[PATCH 1/2] dbus: New helper function: pa_dbus_get_error_message().

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



---
 src/pulsecore/dbus-util.c |   14 ++++++++++++++
 src/pulsecore/dbus-util.h |    8 ++++++++
 2 files changed, 22 insertions(+), 0 deletions(-)

diff --git a/src/pulsecore/dbus-util.c b/src/pulsecore/dbus-util.c
index b79b752..3daf90f 100644
--- a/src/pulsecore/dbus-util.c
+++ b/src/pulsecore/dbus-util.c
@@ -452,6 +452,20 @@ void pa_dbus_free_pending_list(pa_dbus_pending **p) {
     }
 }
 
+const char *pa_dbus_get_error_message(DBusMessage *m) {
+    const char *message;
+
+    pa_assert(m);
+    pa_assert(dbus_message_get_type(m) == DBUS_MESSAGE_TYPE_ERROR);
+
+    if (dbus_message_get_signature(m)[0] != 's')
+        return "<no explanation>";
+
+    pa_assert_se(dbus_message_get_args(m, NULL, DBUS_TYPE_STRING, &message, DBUS_TYPE_INVALID));
+
+    return message;
+}
+
 void pa_dbus_send_error(DBusConnection *c, DBusMessage *in_reply_to, const char *name, const char *format, ...) {
     va_list ap;
     char *message;
diff --git a/src/pulsecore/dbus-util.h b/src/pulsecore/dbus-util.h
index 347f9f3..e3d6e4f 100644
--- a/src/pulsecore/dbus-util.h
+++ b/src/pulsecore/dbus-util.h
@@ -67,6 +67,14 @@ void pa_dbus_sync_pending_list(pa_dbus_pending **p);
 /* Free up a list of pa_dbus_pending_call objects */
 void pa_dbus_free_pending_list(pa_dbus_pending **p);
 
+/* When receiving a DBusMessage with type DBUS_MESSAGE_TYPE_ERROR, the
+ * DBusMessage may or may not contain an error message (a human-readable
+ * explanation of what went wrong). Extracting the error message from the
+ * DBusMessage object is a bit tedious, so here's a helper function that does
+ * that. If the DBusMessage doesn't contain any error message,
+ * "<no explanation>" is returned. */
+const char *pa_dbus_get_error_message(DBusMessage *m);
+
 /* Sends an error message as the reply to the given message. */
 void pa_dbus_send_error(
         DBusConnection *c,
-- 
1.7.7.3



[Index of Archives]     [Linux Audio Users]     [AMD Graphics]     [Linux USB Devel]     [Linux Audio Users]     [Yosemite News]     [Linux Kernel]     [Linux SCSI]

  Powered by Linux