From 363ea5549e03ebe5f41a73faaddc111ab320ab7e Mon Sep 17 00:00:00 2001 From: Johan Hedberg Date: Sat, 8 Aug 2009 20:21:26 +0300 Subject: [PATCH] Use NameHasOwner instead of ListNames for name checking --- gdbus/watch.c | 24 +++++++++--------------- 1 file changed, 9 insertions(+), 15 deletions(-) diff --git a/gdbus/watch.c b/gdbus/watch.c index 1de21da..45dc367 100644 --- a/gdbus/watch.c +++ b/gdbus/watch.c @@ -309,7 +309,6 @@ static DBusHandlerResult name_exit_filter(DBusConnection *connection, struct service_data { DBusConnection *conn; - const char *name; GDBusWatchFunction conn_func; void *user_data; }; @@ -319,8 +318,7 @@ static void service_reply(DBusPendingCall *call, void *user_data) struct service_data *data = user_data; DBusMessage *reply; DBusError error; - char **names; - int i, count; + dbus_bool_t has_owner; reply = dbus_pending_call_steal_reply(call); if (reply == NULL) @@ -329,25 +327,19 @@ static void service_reply(DBusPendingCall *call, void *user_data) dbus_error_init(&error); if (dbus_message_get_args(reply, &error, - DBUS_TYPE_ARRAY, DBUS_TYPE_STRING, &names, &count, + DBUS_TYPE_BOOLEAN, &has_owner, DBUS_TYPE_INVALID) == FALSE) { if (dbus_error_is_set(&error) == TRUE) { error("%s", error.message); dbus_error_free(&error); } else { - error("Wrong arguments for name list"); + error("Wrong arguments for NameHasOwner reply"); } goto done; } - for (i = 0; i < count; i++) - if (g_strcmp0(names[i], data->name) == 0) { - if (data->conn_func) - data->conn_func(data->conn, data->user_data); - break; - } - - g_strfreev(names); + if (has_owner && data->conn_func) + data->conn_func(data->conn, data->user_data); done: dbus_message_unref(reply); @@ -367,18 +359,20 @@ static void check_service(DBusConnection *connection, const char *name, } data->conn = connection; - data->name = name; data->conn_func = connect; data->user_data = user_data; message = dbus_message_new_method_call(DBUS_SERVICE_DBUS, - DBUS_PATH_DBUS, DBUS_INTERFACE_DBUS, "ListNames"); + DBUS_PATH_DBUS, DBUS_INTERFACE_DBUS, "NameHasOwner"); if (message == NULL) { error("Can't allocate new message"); g_free(data); return; } + dbus_message_append_args(message, DBUS_TYPE_STRING, &name, + DBUS_TYPE_INVALID); + if (dbus_connection_send_with_reply(connection, message, &call, -1) == FALSE) { error("Failed to execute method call"); -- 2.7.4