X-Git-Url: https://git.tokkee.org/?a=blobdiff_plain;f=src%2Fcore%2Fstore_lookup.c;h=35c53e5b0b84c9818ac11a7a4004483a4ff27ac3;hb=311ac6c6189df40b68a03503e2744c03c317d8b6;hp=d4fef03c39edc9015e37af5ad526d3e80b36c479;hpb=4e6a5f2d7cb3796f92dd3d89e6090de80494f816;p=sysdb.git diff --git a/src/core/store_lookup.c b/src/core/store_lookup.c index d4fef03..35c53e5 100644 --- a/src/core/store_lookup.c +++ b/src/core/store_lookup.c @@ -31,6 +31,10 @@ * simple full table scan is supported only. */ +#if HAVE_CONFIG_H +# include "config.h" +#endif /* HAVE_CONFIG_H */ + #include "sysdb.h" #include "core/store-private.h" #include "core/object.h" @@ -107,6 +111,26 @@ typedef struct { } host_matcher_t; #define HOST_M(m) ((host_matcher_t *)(m)) +typedef struct { + sdb_store_matcher_t *m; + sdb_store_lookup_cb cb; + void *user_data; +} lookup_iter_data_t; + +/* + * private helper functions + */ + +static int +lookup_iter(sdb_store_base_t *obj, void *user_data) +{ + lookup_iter_data_t *d = user_data; + + if (! sdb_store_matcher_matches(d->m, obj)) + return d->cb(obj, d->user_data); + return 0; +} /* lookup_iter */ + /* * matcher implementations */ @@ -539,5 +563,16 @@ sdb_store_matcher_matches(sdb_store_matcher_t *m, sdb_store_base_t *obj) return matchers[m->type](m, obj); } /* sdb_store_matcher_matches */ +int +sdb_store_lookup(sdb_store_matcher_t *m, sdb_store_lookup_cb cb, + void *user_data) +{ + lookup_iter_data_t data = { m, cb, user_data }; + + if (! cb) + return -1; + return sdb_store_iterate(lookup_iter, &data); +} /* sdb_store_lookup */ + /* vim: set tw=78 sw=4 ts=4 noexpandtab : */