diff options
author | Johan Hedberg <johan.hedberg@intel.com> | 2012-12-17 12:56:25 +0200 |
---|---|---|
committer | Johan Hedberg <johan.hedberg@intel.com> | 2012-12-17 12:56:25 +0200 |
commit | 39036db684b454ea0d49723ecc56f8e2680bd1c5 (patch) | |
tree | 293d8946a1421161dcf4d15d0e9f6bad36a622ab /src/agent.c | |
parent | 72041181ac1e5fff805848b5f83ecdbb77996d3d (diff) | |
download | bluez-39036db684b454ea0d49723ecc56f8e2680bd1c5.tar.gz |
core: Fix looking up "any" agent from the hash table
Diffstat (limited to 'src/agent.c')
-rw-r--r-- | src/agent.c | 26 |
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, |