From 8f3368daeca3d5c184321e96cba60886bb7fc82f Mon Sep 17 00:00:00 2001 From: =?utf8?q?Jos=C3=A9=20Bollo?= Date: Fri, 1 Sep 2017 09:57:58 +0200 Subject: [PATCH] afb-apiset: Refactor and clean MIME-Version: 1.0 Content-Type: text/plain; charset=utf8 Content-Transfer-Encoding: 8bit Change-Id: I063329b23f4476e2570e99dfc639b11320df41d2 Signed-off-by: José Bollo --- src/afb-apiset.c | 36 +++++++++++++++++------------------- src/afb-apiset.h | 3 +-- src/afb-monitor.c | 8 ++++---- 3 files changed, 22 insertions(+), 25 deletions(-) diff --git a/src/afb-apiset.c b/src/afb-apiset.c index 967cd68a..38edcd58 100644 --- a/src/afb-apiset.c +++ b/src/afb-apiset.c @@ -289,8 +289,8 @@ int afb_apiset_del(struct afb_apiset *set, const char *name) * Get from the 'set' the API of 'name' in 'api' with fallback to subset or default api * @param set the set of API * @param name the name of the API to get - * @param api the structure where to store data about the API of name - * @return 0 in case of success or -1 in case of error + * @param rec if not zero look also recursively in subsets + * @return the api pointer in case of success or NULL in case of error */ static struct api_desc *lookup(struct afb_apiset *set, const char *name, int rec) { @@ -303,7 +303,7 @@ static struct api_desc *lookup(struct afb_apiset *set, const char *name, int rec * @param set the set of API * @param name the name of the API to get * @param rec if not zero look also recursively in subsets - * @return 0 in case of success or -1 in case of error + * @return the api pointer in case of success or NULL in case of error */ const struct afb_api *afb_apiset_lookup(struct afb_apiset *set, const char *name, int rec) { @@ -316,18 +316,6 @@ const struct afb_api *afb_apiset_lookup(struct afb_apiset *set, const char *name return NULL; } -/** - * Check whether the 'set' has the API of 'name' - * @param set the set of API - * @param name the name of the API to get - * @param rec if not zero look also recursively in subsets - * @return 1 if the api exist or 0 otherwise - */ -int afb_apiset_has(struct afb_apiset *set, const char *name, int rec) -{ - return !!afb_apiset_lookup(set, name, rec); -} - /** * Starts the service 'api'. * @param api the api @@ -552,11 +540,21 @@ const char **afb_apiset_get_names(struct afb_apiset *set) * @param callback the function to call for each name * @param closure the closure for the callback */ -void afb_apiset_enum(struct afb_apiset *set, void (*callback)(struct afb_apiset *set, const char *name, void *closure), void *closure) +void afb_apiset_enum(struct afb_apiset *set, int rec, void (*callback)(struct afb_apiset *set, const char *name, void *closure), void *closure) { - int i; + struct afb_apiset *iset; + struct api_desc *i, *e; - for (i = 0 ; i < set->count ; i++) - callback(set, set->apis[i].name, closure); + iset = set; + while (iset) { + i = iset->apis; + e = &i[iset->count]; + while (i != e) { + if (lookup(set, i->name, 1) == i) + callback(iset, i->name, closure); + i++; + } + iset = rec ? iset->subset : NULL; + } } diff --git a/src/afb-apiset.h b/src/afb-apiset.h index ff25a7ff..069d560d 100644 --- a/src/afb-apiset.h +++ b/src/afb-apiset.h @@ -31,7 +31,6 @@ extern void afb_apiset_subset_set(struct afb_apiset *set, struct afb_apiset *sub extern struct afb_apiset *afb_apiset_subset_get(struct afb_apiset *set); extern int afb_apiset_add(struct afb_apiset *set, const char *name, struct afb_api api); extern int afb_apiset_del(struct afb_apiset *set, const char *name); -extern int afb_apiset_has(struct afb_apiset *set, const char *name, int rec); extern const struct afb_api *afb_apiset_lookup(struct afb_apiset *set, const char *name, int rec); extern const struct afb_api *afb_apiset_lookup_started(struct afb_apiset *set, const char *name, int rec); extern int afb_apiset_start_service(struct afb_apiset *set, const char *name, int share_session, int onneed); @@ -41,5 +40,5 @@ extern void afb_apiset_set_verbosity(struct afb_apiset *set, const char *name, i extern int afb_apiset_get_verbosity(struct afb_apiset *set, const char *name); extern struct json_object *afb_apiset_describe(struct afb_apiset *set, const char *name); extern const char **afb_apiset_get_names(struct afb_apiset *set); -extern void afb_apiset_enum(struct afb_apiset *set, void (*callback)(struct afb_apiset *set, const char *name, void *closure), void *closure); +extern void afb_apiset_enum(struct afb_apiset *set, int rec, void (*callback)(struct afb_apiset *set, const char *name, void *closure), void *closure); diff --git a/src/afb-monitor.c b/src/afb-monitor.c index 6bd91f90..44233109 100644 --- a/src/afb-monitor.c +++ b/src/afb-monitor.c @@ -115,7 +115,7 @@ static void set_verbosity_to(const char *name, int level) if (!name || !name[0]) verbosity = level; else if (name[0] == '*' && !name[1]) - afb_apiset_enum(main_apiset, set_verbosity_to_all_cb, (void*)(intptr_t)level); + afb_apiset_enum(main_apiset, 1, set_verbosity_to_all_cb, (void*)(intptr_t)level); else afb_apiset_set_verbosity(main_apiset, name, level); } @@ -189,7 +189,7 @@ static void get_verbosity_of(struct json_object *resu, const char *name) if (!name || !name[0]) json_object_object_add(resu, "", encode_verbosity(verbosity)); else if (name[0] == '*' && !name[1]) - afb_apiset_enum(main_apiset, get_verbosity_of_all_cb, resu); + afb_apiset_enum(main_apiset, 1, get_verbosity_of_all_cb, resu); else { l = afb_apiset_get_verbosity(main_apiset, name); if (l >= 0) @@ -243,7 +243,7 @@ static void get_one_api(struct json_object *resu, const char *name, struct json_ struct json_object *o; o = afb_apiset_describe(main_apiset, name); - if (o || afb_apiset_has(main_apiset, name, 0)) + if (o || afb_apiset_lookup(main_apiset, name, 1)) json_object_object_add(resu, name, o); } @@ -285,7 +285,7 @@ static struct json_object *get_apis(struct json_object *spec) } else if (json_object_is_type(spec, json_type_string)) { get_one_api(resu, json_object_get_string(spec), NULL); } else if (json_object_get_boolean(spec)) { - afb_apiset_enum(main_apiset, get_apis_of_all_cb, resu); + afb_apiset_enum(main_apiset, 1, get_apis_of_all_cb, resu); } return resu; } -- 2.16.6