diff options
author | José Bollo <jose.bollo@iot.bzh> | 2017-08-31 18:47:50 +0200 |
---|---|---|
committer | José Bollo <jose.bollo@iot.bzh> | 2017-08-31 18:47:50 +0200 |
commit | 2e83db0375d44c0b05742e787f6abd4127e2aac8 (patch) | |
tree | 846004a678795804e60627fdc4dd366a64a4e8b0 /src/afb-apiset.c | |
parent | 859aa04ec2ee66709261a62d7f002d6a01c97a81 (diff) |
afb-apiset: refactor access to apis
Change-Id: If003067ada5802b7d77f06f560a5d07464909a61
Signed-off-by: José Bollo <jose.bollo@iot.bzh>
Diffstat (limited to 'src/afb-apiset.c')
-rw-r--r-- | src/afb-apiset.c | 78 |
1 files changed, 27 insertions, 51 deletions
diff --git a/src/afb-apiset.c b/src/afb-apiset.c index 18104a93..967cd68a 100644 --- a/src/afb-apiset.c +++ b/src/afb-apiset.c @@ -286,68 +286,46 @@ int afb_apiset_del(struct afb_apiset *set, const char *name) } /** - * Get from the 'set' the API of 'name' in 'api' + * 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_lookup(struct afb_apiset *set, const char *name, struct afb_api *api) +static struct api_desc *lookup(struct afb_apiset *set, const char *name, int rec) { - const struct api_desc *i; - - i = search(set, name); - if (i) { - *api = i->api; - return 0; - } - - errno = ENOENT; - return -1; -} - -/** - * Check whether the 'set' has the API of 'name' - * @param set the set of API - * @param name the name of the API to get - * @return 1 if the api exist or 0 otherwise - */ -int afb_apiset_has(struct afb_apiset *set, const char *name) -{ - return !!search(set, name); + struct api_desc *i = search(set, name); + return i || !rec || !set->subset ? i : lookup(set->subset, name, rec); } /** - * Get from the 'set' the API of 'name' in 'api' with fallback to subset or default api + * Get from the 'set' the API of 'name' in '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 + * @param rec if not zero look also recursively in subsets * @return 0 in case of success or -1 in case of error */ -static struct api_desc *get_api(struct afb_apiset *set, const char *name) +const struct afb_api *afb_apiset_lookup(struct afb_apiset *set, const char *name, int rec) { - struct api_desc *i = search(set, name); - return i || !set->subset ? i : get_api(set->subset, name); + struct api_desc *i; + + i = lookup(set, name, rec); + if (i) + return &i->api; + errno = ENOENT; + return NULL; } /** - * Get from the 'set' the API of 'name' in 'api' with fallback to subset or default api + * 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 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 1 if the api exist or 0 otherwise */ -int afb_apiset_get(struct afb_apiset *set, const char *name, struct afb_api *api) +int afb_apiset_has(struct afb_apiset *set, const char *name, int rec) { - const struct api_desc *i; - - i = get_api(set, name); - if (!i) { - errno = ENOENT; - return -1; - } - *api = i->api; - return 0; + return !!afb_apiset_lookup(set, name, rec); } /** @@ -391,23 +369,21 @@ static int start_api(struct afb_apiset *set, struct api_desc *api, int share_ses } /** - * Get from the 'set' the API of 'name' in 'api' with fallback to subset or default api + * Get from the 'set' the API of 'name' in '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 + * @param rec if not zero look also recursively in subsets * @return 0 in case of success or -1 in case of error */ -int afb_apiset_get_started(struct afb_apiset *set, const char *name, struct afb_api *api) +const struct afb_api *afb_apiset_lookup_started(struct afb_apiset *set, const char *name, int rec) { struct api_desc *i; - i = get_api(set, name); - if (!i) { - errno = ENOENT; - return -1; - } - *api = i->api; - return i->status ? start_api(set, i, 1, 1) : 0; + i = lookup(set, name, rec); + if (i) + return i->status && start_api(set, i, 1, 1) ? NULL : &i->api; + errno = ENOENT; + return NULL; } /** |