From 285fc5b291793dfbfe05625d352bd326e224b700 Mon Sep 17 00:00:00 2001 From: =?utf8?q?Jos=C3=A9=20Bollo?= Date: Fri, 27 Apr 2018 15:55:43 +0200 Subject: [PATCH] afb-apiset: manage deletion of apis MIME-Version: 1.0 Content-Type: text/plain; charset=utf8 Content-Transfer-Encoding: 8bit Change-Id: If8b4a2b8773e5e7ce3ae62839193c611eefcb811 Signed-off-by: José Bollo --- src/afb-api.h | 1 + src/afb-apiset.c | 17 ++++++++++++----- 2 files changed, 13 insertions(+), 5 deletions(-) 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; -- 2.16.6