Code

store: Added sdb_store_iterate().
[sysdb.git] / src / core / store.c
index 47ba0356933453d4aa0c061daf23a6d3ad4a727c..b2fb0f602837f62128e09c849b00dde84f1389c0 100644 (file)
@@ -525,7 +525,6 @@ sdb_store_host_tojson(sdb_store_base_t *h, sdb_strbuf_t *buf, int flags)
        return 0;
 } /* sdb_store_host_tojson */
 
-/* TODO: actually support hierarchical data */
 int
 sdb_store_tojson(sdb_strbuf_t *buf, int flags)
 {
@@ -562,5 +561,34 @@ sdb_store_tojson(sdb_strbuf_t *buf, int flags)
        return 0;
 } /* sdb_store_tojson */
 
+/* TODO: actually support hierarchical data */
+int
+sdb_store_iterate(sdb_store_iter_cb cb, void *user_data)
+{
+       sdb_llist_iter_t *host_iter;
+       int status = 0;
+
+       pthread_rwlock_rdlock(&obj_lock);
+
+       host_iter = sdb_llist_get_iter(obj_list);
+       if (! host_iter)
+               status = -1;
+
+       /* has_next returns false if the iterator is NULL */
+       while (sdb_llist_iter_has_next(host_iter)) {
+               sdb_store_base_t *host = STORE_BASE(sdb_llist_iter_get_next(host_iter));
+               assert(host);
+
+               if (cb(host, user_data)) {
+                       status = -1;
+                       break;
+               }
+       }
+
+       sdb_llist_iter_destroy(host_iter);
+       pthread_rwlock_unlock(&obj_lock);
+       return status;
+} /* sdb_store_iterate */
+
 /* vim: set tw=78 sw=4 ts=4 noexpandtab : */