a = json_object_new_object();
json_object_object_add(g, "responses", a);
- f = json_object_new_object();
- json_object_object_add(a, "200", f);
- json_object_object_add(f, "description", json_object_new_string(verb->info?:verb->verb));
+ g = json_object_new_object();
+ json_object_object_add(a, "200", g);
+ json_object_object_add(g, "description", json_object_new_string(verb->info?:verb->verb));
return f;
}
/* allocates the description */
api = calloc(1, sizeof *api + (copy_info && info ? 1 + strlen(info) : 0));
- if (!api)
+ if (!api) {
+ ERROR("out of memory");
goto oom;
+ }
api->refcount = 1;
if (!info)
api->info = &nulchar;
oom2:
free(api);
oom:
- ERROR("out of memory");
return NULL;
}
{
if (api && !__atomic_sub_fetch(&api->refcount, 1, __ATOMIC_RELAXED)) {
afb_export_destroy(api->export);
+ while (api->count)
+ free(api->verbs[--api->count]);
+ free(api->verbs);
free(api);
}
}
const char *verb,
void **vcbdata)
{
- struct afb_verb_v3 **v, **e, *i;
+ struct afb_verb_v3 *v;
+ int i;
- v = api->verbs;
- e = &v[api->count];
- while (v != e) {
- i = *v++;
- if (!strcasecmp(i->verb, verb)) {
- api->count--;
+ for (i = 0 ; i < api->count ; i++) {
+ v = api->verbs[i];
+ if (!strcasecmp(verb, v->verb)) {
+ api->verbs[i] = api->verbs[--api->count];
if (vcbdata)
- *vcbdata = i->vcbdata;
- if (v != e)
- *--v = *--e;
- free(i);
+ *vcbdata = v->vcbdata;
+ free(v);
return 0;
}
}