Blame SOURCES/0006-reserve-Move-get_name_owner-to-the-public-rd_device-.patch

2b72d0
From 88a7b31ca7d1ec38b68e7bfd99e2e53afe96cfcf Mon Sep 17 00:00:00 2001
2b72d0
From: Mikel Astiz <mikel.astiz@bmw-carit.de>
2b72d0
Date: Wed, 30 Jan 2013 09:30:30 +0100
2b72d0
Subject: [PATCH 6/7] reserve: Move get_name_owner() to the public rd_device
2b72d0
 API
2b72d0
2b72d0
The function is interesting for both rd_device and rd_monitor so make
2b72d0
it part of the rd_device public API to avoid duplicated code.
2b72d0
2b72d0
The decision to move the function to reserve.c is motivated by the fact
2b72d0
that other projects (i.e. jack) use reserve.c only. Therefore, adding a
2b72d0
reserve->reserve-monitor dependency should be avoided.
2b72d0
---
2b72d0
 src/modules/reserve-monitor.c | 59 ++-----------------------------------------
2b72d0
 src/modules/reserve.c         | 56 ++++++++++++++++++++++++++++++++++++++++
2b72d0
 src/modules/reserve.h         |  9 +++++++
2b72d0
 3 files changed, 67 insertions(+), 57 deletions(-)
2b72d0
2b72d0
diff --git a/src/modules/reserve-monitor.c b/src/modules/reserve-monitor.c
2b72d0
index 4aa4a2b..70de870 100644
2b72d0
--- a/src/modules/reserve-monitor.c
2b72d0
+++ b/src/modules/reserve-monitor.c
2b72d0
@@ -32,6 +32,7 @@
2b72d0
 #include <assert.h>
2b72d0
 
2b72d0
 #include "reserve-monitor.h"
2b72d0
+#include "reserve.h"
2b72d0
 
2b72d0
 struct rm_monitor {
2b72d0
 	int ref;
2b72d0
@@ -120,62 +121,6 @@ invalid:
2b72d0
 	return DBUS_HANDLER_RESULT_NOT_YET_HANDLED;
2b72d0
 }
2b72d0
 
2b72d0
-static int get_name_owner(
2b72d0
-	DBusConnection *connection,
2b72d0
-	const char *name,
2b72d0
-	char **name_owner,
2b72d0
-	DBusError *error) {
2b72d0
-
2b72d0
-	DBusMessage *msg, *reply;
2b72d0
-	int r;
2b72d0
-
2b72d0
-	*name_owner = NULL;
2b72d0
-
2b72d0
-	if (!(msg = dbus_message_new_method_call(DBUS_SERVICE_DBUS, DBUS_PATH_DBUS, DBUS_INTERFACE_DBUS, "GetNameOwner"))) {
2b72d0
-		r = -ENOMEM;
2b72d0
-		goto fail;
2b72d0
-	}
2b72d0
-
2b72d0
-	if (!dbus_message_append_args(msg, DBUS_TYPE_STRING, &name, DBUS_TYPE_INVALID)) {
2b72d0
-		r = -ENOMEM;
2b72d0
-		goto fail;
2b72d0
-	}
2b72d0
-
2b72d0
-	reply = dbus_connection_send_with_reply_and_block(connection, msg, DBUS_TIMEOUT_USE_DEFAULT, error);
2b72d0
-	dbus_message_unref(msg);
2b72d0
-	msg = NULL;
2b72d0
-
2b72d0
-	if (reply) {
2b72d0
-		if (!dbus_message_get_args(reply, error, DBUS_TYPE_STRING, name_owner, DBUS_TYPE_INVALID)) {
2b72d0
-			dbus_message_unref(reply);
2b72d0
-			r = -EIO;
2b72d0
-			goto fail;
2b72d0
-		}
2b72d0
-
2b72d0
-		*name_owner = strdup(*name_owner);
2b72d0
-		dbus_message_unref(reply);
2b72d0
-
2b72d0
-		if (!*name_owner) {
2b72d0
-			r = -ENOMEM;
2b72d0
-			goto fail;
2b72d0
-		}
2b72d0
-
2b72d0
-	} else if (dbus_error_has_name(error, "org.freedesktop.DBus.Error.NameHasNoOwner"))
2b72d0
-		dbus_error_free(error);
2b72d0
-	else {
2b72d0
-		r = -EIO;
2b72d0
-		goto fail;
2b72d0
-	}
2b72d0
-
2b72d0
-	return 0;
2b72d0
-
2b72d0
-fail:
2b72d0
-	if (msg)
2b72d0
-		dbus_message_unref(msg);
2b72d0
-
2b72d0
-	return r;
2b72d0
-}
2b72d0
-
2b72d0
 int rm_watch(
2b72d0
 	rm_monitor **_m,
2b72d0
 	DBusConnection *connection,
2b72d0
@@ -243,7 +188,7 @@ int rm_watch(
2b72d0
 
2b72d0
 	m->matching = 1;
2b72d0
 
2b72d0
-	if ((r = get_name_owner(m->connection, m->service_name, &name_owner, error)) < 0)
2b72d0
+	if ((r = rd_dbus_get_name_owner(m->connection, m->service_name, &name_owner, error)) < 0)
2b72d0
 		goto fail;
2b72d0
 
2b72d0
 	m->busy = get_busy(m->connection, name_owner);
2b72d0
diff --git a/src/modules/reserve.c b/src/modules/reserve.c
2b72d0
index b4c168c..bbb6773 100644
2b72d0
--- a/src/modules/reserve.c
2b72d0
+++ b/src/modules/reserve.c
2b72d0
@@ -606,3 +606,59 @@ void* rd_get_userdata(rd_device *d) {
2b72d0
 
2b72d0
 	return d->userdata;
2b72d0
 }
2b72d0
+
2b72d0
+int rd_dbus_get_name_owner(
2b72d0
+	DBusConnection *connection,
2b72d0
+	const char *name,
2b72d0
+	char **name_owner,
2b72d0
+	DBusError *error) {
2b72d0
+
2b72d0
+	DBusMessage *msg, *reply;
2b72d0
+	int r;
2b72d0
+
2b72d0
+	*name_owner = NULL;
2b72d0
+
2b72d0
+	if (!(msg = dbus_message_new_method_call(DBUS_SERVICE_DBUS, DBUS_PATH_DBUS, DBUS_INTERFACE_DBUS, "GetNameOwner"))) {
2b72d0
+		r = -ENOMEM;
2b72d0
+		goto fail;
2b72d0
+	}
2b72d0
+
2b72d0
+	if (!dbus_message_append_args(msg, DBUS_TYPE_STRING, &name, DBUS_TYPE_INVALID)) {
2b72d0
+		r = -ENOMEM;
2b72d0
+		goto fail;
2b72d0
+	}
2b72d0
+
2b72d0
+	reply = dbus_connection_send_with_reply_and_block(connection, msg, DBUS_TIMEOUT_USE_DEFAULT, error);
2b72d0
+	dbus_message_unref(msg);
2b72d0
+	msg = NULL;
2b72d0
+
2b72d0
+	if (reply) {
2b72d0
+		if (!dbus_message_get_args(reply, error, DBUS_TYPE_STRING, name_owner, DBUS_TYPE_INVALID)) {
2b72d0
+			dbus_message_unref(reply);
2b72d0
+			r = -EIO;
2b72d0
+			goto fail;
2b72d0
+		}
2b72d0
+
2b72d0
+		*name_owner = strdup(*name_owner);
2b72d0
+		dbus_message_unref(reply);
2b72d0
+
2b72d0
+		if (!*name_owner) {
2b72d0
+			r = -ENOMEM;
2b72d0
+			goto fail;
2b72d0
+		}
2b72d0
+
2b72d0
+	} else if (dbus_error_has_name(error, "org.freedesktop.DBus.Error.NameHasNoOwner"))
2b72d0
+		dbus_error_free(error);
2b72d0
+	else {
2b72d0
+		r = -EIO;
2b72d0
+		goto fail;
2b72d0
+	}
2b72d0
+
2b72d0
+	return 0;
2b72d0
+
2b72d0
+fail:
2b72d0
+	if (msg)
2b72d0
+		dbus_message_unref(msg);
2b72d0
+
2b72d0
+	return r;
2b72d0
+}
2b72d0
diff --git a/src/modules/reserve.h b/src/modules/reserve.h
2b72d0
index bc50870..6527bd7 100644
2b72d0
--- a/src/modules/reserve.h
2b72d0
+++ b/src/modules/reserve.h
2b72d0
@@ -72,6 +72,15 @@ void rd_set_userdata(rd_device *d, void *userdata);
2b72d0
  * userdata was set. */
2b72d0
 void* rd_get_userdata(rd_device *d);
2b72d0
 
2b72d0
+/* Helper function to get the unique connection name owning a given
2b72d0
+ * name. Returns 0 on success, a negative errno style return value on
2b72d0
+ * error. */
2b72d0
+int rd_dbus_get_name_owner(
2b72d0
+	DBusConnection *connection,
2b72d0
+	const char *name,
2b72d0
+	char **name_owner,
2b72d0
+	DBusError *error);
2b72d0
+
2b72d0
 #ifdef __cplusplus
2b72d0
 }
2b72d0
 #endif
2b72d0
-- 
2b72d0
1.8.1.4
2b72d0