diff options
author | José Bollo <jose.bollo@iot.bzh> | 2017-03-27 11:23:51 +0200 |
---|---|---|
committer | José Bollo <jose.bollo@iot.bzh> | 2017-03-27 11:23:51 +0200 |
commit | 44f21bd2a3b50f92669223cdafe79993654c1e19 (patch) | |
tree | b8656cf9c11f25183bd95822c085ce35a459a9e5 /src/afb-hreq.c | |
parent | feccdb76f572a5fad947475c21b5b9aff696b04b (diff) |
Simplify functions for calls
For historical reasons, the call to apis was
passing the length of the api and the length
of the verb. The reason was to avoid a copy
of strings. But the copy occured only for HTTP
requests. Having this implementation is of
small interest and compromise future changes.
This patch simplify things.
Change-Id: I8157724c6c721b6797cd0eab52b07e1b8d6eb5f8
Signed-off-by: José Bollo <jose.bollo@iot.bzh>
Diffstat (limited to 'src/afb-hreq.c')
-rw-r--r-- | src/afb-hreq.c | 16 |
1 files changed, 16 insertions, 0 deletions
diff --git a/src/afb-hreq.c b/src/afb-hreq.c index 00d4b0eb..0fe908cb 100644 --- a/src/afb-hreq.c +++ b/src/afb-hreq.c @@ -335,6 +335,8 @@ void afb_hreq_unref(struct afb_hreq *hreq) } afb_context_disconnect(&hreq->context); json_object_put(hreq->json); + free(hreq->api); + free(hreq->verb); free(hreq); } @@ -940,6 +942,20 @@ static void req_subcall(struct afb_hreq *hreq, const char *api, const char *verb afb_subcall(&hreq->context, api, verb, args, callback, closure, (struct afb_req){ .itf = &afb_hreq_req_itf, .closure = hreq }); } +int afb_hreq_init_req_call(struct afb_hreq *hreq, const char *api, size_t lenapi, const char *verb, size_t lenverb) +{ + free(hreq->api); + free(hreq->verb); + hreq->api = strndup(api, lenapi); + hreq->verb = strndup(verb, lenverb); + if (hreq->api == NULL || hreq->verb == NULL) { + ERROR("Out of memory"); + errno = ENOMEM; + return -1; + } + return afb_hreq_init_context(hreq); +} + int afb_hreq_init_context(struct afb_hreq *hreq) { const char *uuid; |