From f047a6ebb105106fd3b293681298a9fa86418b23 Mon Sep 17 00:00:00 2001 From: =?utf8?q?Jos=C3=A9=20Bollo?= Date: Fri, 21 Apr 2017 18:59:02 +0200 Subject: [PATCH] apiset: improvements MIME-Version: 1.0 Content-Type: text/plain; charset=utf8 Content-Transfer-Encoding: 8bit Change-Id: I476ab17bb5c48dbb3cd6c215687989203407549f Signed-off-by: José Bollo --- src/afb-apiset.c | 54 +++++++++++++++++++++++++++++++++++++++++++++--------- src/afb-apiset.h | 3 +++ 2 files changed, 48 insertions(+), 9 deletions(-) diff --git a/src/afb-apiset.c b/src/afb-apiset.c index c17881ed..63c28fe7 100644 --- a/src/afb-apiset.c +++ b/src/afb-apiset.c @@ -146,6 +146,15 @@ struct afb_apiset *afb_apiset_create(const char *name, int timeout) return set; } +/** + * the name of the apiset + * @param set the api set + * @return the name of the set + */ +const char *afb_apiset_name(struct afb_apiset *set) +{ + return set->name; +} /** * Get the API timeout of the set @@ -246,7 +255,6 @@ void afb_apiset_default_api_drop(struct afb_apiset *set) * @param api the api * @returns 0 in case of success or -1 in case * of error with errno set: - * - EINVAL if name isn't valid * - EEXIST if name already registered * - ENOMEM when out of memory */ @@ -255,13 +263,6 @@ int afb_apiset_add(struct afb_apiset *set, const char *name, struct afb_api api) struct api_desc *apis; int i, c; - /* Checks the api name */ - if (!afb_api_is_valid_name(name)) { - ERROR("invalid api name forbidden (name is '%s')", name); - errno = EINVAL; - goto error; - } - /* check previously existing plugin */ for (i = 0 ; i < set->count ; i++) { c = strcasecmp(set->apis[i].name, name); @@ -337,6 +338,27 @@ int afb_apiset_del(struct afb_apiset *set, const char *name) * @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 */ +int afb_apiset_lookup(struct afb_apiset *set, const char *name, struct afb_api *api) +{ + const struct api_desc *i; + + i = search(set, name); + if (i) { + *api = i->api; + return 0; + } + + errno = ENOENT; + return -1; +} + +/** + * 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 + */ int afb_apiset_get(struct afb_apiset *set, const char *name, struct afb_api *api) { const struct api_desc *i; @@ -478,7 +500,7 @@ int afb_apiset_get_verbosity(struct afb_apiset *set, const char *name) return -1; } if (!i->api.itf->get_verbosity) - return 0; + return verbosity; return i->api.itf->get_verbosity(i->api.closure); } @@ -513,3 +535,17 @@ const char **afb_apiset_get_names(struct afb_apiset *set) return names; } +/** + * Enumerate the api names to a callback. + * @param set the api 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) +{ + int i; + + for (i = 0 ; i < set->count ; i++) + callback(set, set->apis[i].name, closure); +} + diff --git a/src/afb-apiset.h b/src/afb-apiset.h index 2b3ea2a6..ff6f6b48 100644 --- a/src/afb-apiset.h +++ b/src/afb-apiset.h @@ -23,6 +23,7 @@ struct afb_apiset; extern struct afb_apiset *afb_apiset_addref(struct afb_apiset *set); extern void afb_apiset_unref(struct afb_apiset *set); extern struct afb_apiset *afb_apiset_create(const char *name, int timeout); +extern const char *afb_apiset_name(struct afb_apiset *set); extern int afb_apiset_timeout_get(struct afb_apiset *set); extern void afb_apiset_timeout_set(struct afb_apiset *set, int to); extern void afb_apiset_subset_set(struct afb_apiset *set, struct afb_apiset *subset); @@ -33,6 +34,7 @@ extern void afb_apiset_default_api_set(struct afb_apiset *set, struct afb_api ap extern void afb_apiset_default_api_drop(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_lookup(struct afb_apiset *set, const char *name, struct afb_api *api); extern int afb_apiset_get(struct afb_apiset *set, const char *name, struct afb_api *api); extern int afb_apiset_start_service(struct afb_apiset *set, const char *name, int share_session, int onneed); extern int afb_apiset_start_all_services(struct afb_apiset *set, int share_session); @@ -40,4 +42,5 @@ extern void afb_apiset_update_hooks(struct afb_apiset *set, const char *name); extern void afb_apiset_set_verbosity(struct afb_apiset *set, const char *name, int level); extern int afb_apiset_get_verbosity(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); -- 2.16.6