diff --git a/src/core/store.c b/src/core/store.c
index 5a80a3105fb0bc011fb4f4dac527c934193ebc72..bb37e26a7d9e074466f70d724a8943acabd03747 100644 (file)
--- a/src/core/store.c
+++ b/src/core/store.c
*/
static sdb_store_obj_t *
-store_lookup_in_list(sdb_llist_t *l, int type, const char *name)
+lookup_host(const char *name)
{
- sdb_llist_iter_t *iter;
-
- if (! l)
- return NULL;
-
- iter = sdb_llist_get_iter(l);
- if (! iter)
- return NULL;
-
- while (sdb_llist_iter_has_next(iter)) {
- sdb_store_obj_t *sobj = SDB_STORE_OBJ(sdb_llist_iter_get_next(iter));
- assert(sobj);
-
- if ((STORE_BASE(sobj)->type == type)
- && (! strcasecmp(SDB_OBJ(sobj)->name, name))) {
- sdb_llist_iter_destroy(iter);
- return sobj;
- }
-
- /* don't lookups non-host types from hierarchical hosts */
- if ((type != SDB_HOST) && (STORE_BASE(sobj)->type == SDB_HOST))
- continue;
-
- sobj = store_lookup_in_list(sobj->services, type, name);
- if (sobj) {
- sdb_llist_iter_destroy(iter);
- return sobj;
- }
- }
- sdb_llist_iter_destroy(iter);
- return NULL;
-} /* store_lookup_in_list */
-
-static sdb_store_obj_t *
-store_lookup(int type, const char *name)
-{
- return store_lookup_in_list(host_list, type, name);
-} /* store_lookup */
+ return SDB_STORE_OBJ(sdb_llist_search_by_name(host_list, name));
+} /* lookup_host */
/* The obj_lock has to be acquired before calling this function. */
static int
|| (type == SDB_SERVICE)
|| (type == SDB_ATTRIBUTE));
+ assert(hostname || (type == SDB_HOST));
+ assert((! hostname)
+ || (type == SDB_SERVICE)
+ || (type == SDB_ATTRIBUTE));
+
if (! host_list)
if (! (host_list = sdb_llist_create()))
return -1;
}
if (hostname) {
- sdb_store_obj_t *parent;
+ sdb_store_obj_t *host;
host_cname = sdb_plugin_cname(strdup(hostname));
if (! host_cname) {
}
hostname = host_cname;
- parent = store_lookup(SDB_HOST, hostname);
- if (! parent) {
+ host = lookup_host(hostname);
+ if (! host) {
sdb_log(SDB_LOG_ERR, "store: Failed to store %s '%s' - "
"host '%s' not found", SDB_STORE_TYPE_TO_NAME(type),
name, hostname);
}
if (type == SDB_ATTRIBUTE)
- parent_list = parent->attributes;
+ parent_list = host->attributes;
else
- parent_list = parent->services;
+ parent_list = host->services;
}
if (type == SDB_HOST)
- /* make sure that each host is unique */
- old = STORE_BASE(store_lookup_in_list(host_list, type, name));
- else if (type == SDB_ATTRIBUTE)
- /* look into attributes of this host */
- old = STORE_BASE(sdb_llist_search_by_name(parent_list, name));
+ old = STORE_BASE(sdb_llist_search_by_name(host_list, name));
else
- /* look into services assigned to this host (store_lookup_in_list
- * does not look up services from hierarchical hosts) */
- old = STORE_BASE(store_lookup_in_list(parent_list, type, name));
+ old = STORE_BASE(sdb_llist_search_by_name(parent_list, name));
if (old) {
if (old->last_update > last_update) {
if (! name)
return NULL;
- host = store_lookup(SDB_HOST, name);
+ host = lookup_host(name);
return host != NULL;
} /* sdb_store_has_host */
if (! name)
return NULL;
- host = store_lookup(SDB_HOST, name);
+ host = lookup_host(name);
if (! host)
return NULL;