fix tiny memory leak
[src/app-framework-binder.git] / src / afb-subcall.c
index 4d18bee..6566b5b 100644 (file)
@@ -99,18 +99,7 @@ static struct json_object *subcall_json(struct afb_subcall *subcall)
 
 static struct afb_arg subcall_get(struct afb_subcall *subcall, const char *name)
 {
-       struct afb_arg arg;
-       struct json_object *value;
-
-       if (json_object_object_get_ex(subcall->args, name, &value)) {
-               arg.name = name;
-               arg.value = json_object_get_string(value);
-       } else {
-               arg.name = NULL;
-               arg.value = NULL;
-       }
-       arg.path = NULL;
-       return arg;
+       return afb_msg_json_get_arg(subcall->args, name);
 }
 
 static void subcall_emit(struct afb_subcall *subcall, int iserror, struct json_object *object)
@@ -170,13 +159,23 @@ static void subcall_subcall(struct afb_subcall *subcall, const char *api, const
        afb_subcall(&subcall->context, api, verb, args, callback, closure, (struct afb_req){ .itf = &afb_subcall_req_itf, .closure = subcall });
 }
 
+void afb_subcall_internal_error(void (*callback)(void*, int, struct json_object*), void *closure)
+{
+       static struct json_object *obj;
+
+       if (obj == NULL)
+               obj = afb_msg_json_reply_error("failed", "internal error", NULL, NULL);
+
+       callback(closure, 1, obj);
+}
+
 void afb_subcall(struct afb_context *context, const char *api, const char *verb, struct json_object *args, void (*callback)(void*, int, struct json_object*), void *closure, struct afb_req req)
 {
        struct afb_subcall *subcall;
 
        subcall = calloc(1, sizeof *subcall);
        if (subcall == NULL) {
-               callback(closure, 1, afb_msg_json_reply_error("failed", "out of memory", NULL, NULL));
+               afb_subcall_internal_error(callback, closure);
                return;
        }