From: José Bollo Date: Fri, 27 Apr 2018 13:55:43 +0000 (+0200) Subject: afb-apiset: manage deletion of apis X-Git-Tag: flounder_5.99.1~25 X-Git-Url: https://gerrit.automotivelinux.org/gerrit/gitweb?p=src%2Fapp-framework-binder.git;a=commitdiff_plain;h=285fc5b291793dfbfe05625d352bd326e224b700 afb-apiset: manage deletion of apis Change-Id: If8b4a2b8773e5e7ce3ae62839193c611eefcb811 Signed-off-by: José Bollo --- diff --git a/src/afb-api.h b/src/afb-api.h index 60e95b11..3f2e7f15 100644 --- a/src/afb-api.h +++ b/src/afb-api.h @@ -29,6 +29,7 @@ struct afb_api_itf int (*get_verbosity)(void *closure); void (*set_verbosity)(void *closure, int level); struct json_object *(*describe)(void *closure); + void (*unref)(void *closure); }; struct afb_api diff --git a/src/afb-apiset.c b/src/afb-apiset.c index a373c207..8d76bbfe 100644 --- a/src/afb-apiset.c +++ b/src/afb-apiset.c @@ -264,21 +264,28 @@ error: */ int afb_apiset_del(struct afb_apiset *set, const char *name) { - int i, c; + struct api_desc *i, *e; + int c; /* search the api */ - for (i = 0 ; i < set->count ; i++) { - c = strcasecmp(set->apis[i].name, name); + i = set->apis; + e = i + set->count; + while (i != e) { + c = strcasecmp(i->name, name); if (c == 0) { + if (i->api.itf->unref) + i->api.itf->unref(i->api.closure); set->count--; - while(i < set->count) { - set->apis[i] = set->apis[i + 1]; + e--; + while (i != e) { + i[0] = i[1]; i++; } return 0; } if (c > 0) break; + i++; } errno = ENOENT; return -1;