summaryrefslogtreecommitdiff
path: root/src/agent.c
diff options
context:
space:
mode:
authorJohan Hedberg <johan.hedberg@intel.com>2012-12-17 12:56:25 +0200
committerJohan Hedberg <johan.hedberg@intel.com>2012-12-17 12:56:25 +0200
commit39036db684b454ea0d49723ecc56f8e2680bd1c5 (patch)
tree293d8946a1421161dcf4d15d0e9f6bad36a622ab /src/agent.c
parent72041181ac1e5fff805848b5f83ecdbb77996d3d (diff)
downloadbluez-39036db684b454ea0d49723ecc56f8e2680bd1c5.tar.gz
core: Fix looking up "any" agent from the hash table
Diffstat (limited to 'src/agent.c')
-rw-r--r--src/agent.c26
1 files changed, 18 insertions, 8 deletions
diff --git a/src/agent.c b/src/agent.c
index a5c0c2c97..74bbc6480 100644
--- a/src/agent.c
+++ b/src/agent.c
@@ -230,22 +230,32 @@ void agent_unref(struct agent *agent)
g_free(agent);
}
+static struct agent *get_any_agent(void)
+{
+ GHashTableIter iter;
+ gpointer key, value;
+
+ g_hash_table_iter_init(&iter, agent_list);
+ if (g_hash_table_iter_next(&iter, &key, &value))
+ return value;
+
+ return NULL;
+}
+
struct agent *agent_get(const char *owner)
{
struct agent *agent;
- agent = g_hash_table_lookup(agent_list, owner);
- if (agent)
- return agent_ref(agent);
+ if (owner) {
+ agent = g_hash_table_lookup(agent_list, owner);
+ if (agent)
+ return agent_ref(agent);
+ }
if (default_agent)
return agent_ref(default_agent);
- agent = g_hash_table_lookup(agent_list, NULL);
- if (agent)
- return agent_ref(agent);
-
- return NULL;
+ return get_any_agent();
}
static struct agent *agent_create( const char *name, const char *path,