ucode: adjust to latest ucode api
authorJo-Philipp Wich <jo@mein.io>
Mon, 7 Feb 2022 08:53:04 +0000 (09:53 +0100)
committerJo-Philipp Wich <jo@mein.io>
Mon, 7 Feb 2022 08:55:20 +0000 (09:55 +0100)
The public libucode api has been revised to return and expect an
uc_program_t pointer instead of a main function reference.

The program (former main function) is also not implicitly released
by uc_vm_execute() anymore.

Adjust the ucode plugin accordingly to match the new requirements.

Signed-off-by: Jo-Philipp Wich <jo@mein.io>
ucode.c

diff --git a/ucode.c b/ucode.c
index dc6a4e21f2e93e3657ccc23a9ba140e0132df5a9..face78400d1ef4b92d7fa09854cce748be130352 100644 (file)
--- a/ucode.c
+++ b/ucode.c
@@ -507,22 +507,22 @@ rpc_ucode_script_call(struct ubus_context *ctx, struct ubus_object *obj,
        return UBUS_STATUS_OK;
 }
 
-static uc_function_t *
+static uc_program_t *
 rpc_ucode_script_compile(const char *path, uc_source_t *src)
 {
        char *syntax_error = NULL;
-       uc_function_t *progfunc;
+       uc_program_t *prog;
 
-       progfunc = uc_compile(&config, src, &syntax_error);
+       prog = uc_compile(&config, src, &syntax_error);
 
-       if (!progfunc)
+       if (!prog)
                fprintf(stderr, "Unable to compile ucode script %s: %s\n",
                        path, syntax_error);
 
        uc_source_put(src);
        free(syntax_error);
 
-       return progfunc;
+       return prog;
 }
 
 static bool
@@ -906,7 +906,7 @@ rpc_ucode_init_globals(rpc_ucode_script_t *script)
 }
 
 static rpc_ucode_script_t *
-rpc_ucode_script_execute(struct ubus_context *ctx, const char *path, uc_function_t *func)
+rpc_ucode_script_execute(struct ubus_context *ctx, const char *path, uc_program_t *prog)
 {
        rpc_ucode_script_t *script;
        uc_value_t *signature;
@@ -921,7 +921,7 @@ rpc_ucode_script_execute(struct ubus_context *ctx, const char *path, uc_function
                fprintf(stderr, "Unable to allocate context for ucode script %s: %s\n",
                        path, strerror(errno));
 
-               ucv_put(&func->header);
+               uc_program_put(prog);
 
                return NULL;
        }
@@ -931,13 +931,14 @@ rpc_ucode_script_execute(struct ubus_context *ctx, const char *path, uc_function
        uc_vm_init(&script->vm, &config);
        rpc_ucode_init_globals(script);
 
-       status = uc_vm_execute(&script->vm, func, &signature);
+       status = uc_vm_execute(&script->vm, prog, &signature);
 
        script->pending_replies = ucv_array_new(&script->vm);
 
        uc_vm_registry_set(&script->vm, "rpcd.ucode.signature", signature);
        uc_vm_registry_set(&script->vm, "rpcd.ucode.deferreds", script->pending_replies);
 
+       uc_program_put(prog);
        ucv_gc(&script->vm);
 
        switch (status) {
@@ -972,7 +973,7 @@ static int
 rpc_ucode_init_script(struct ubus_context *ctx, const char *path)
 {
        rpc_ucode_script_t *script;
-       uc_function_t *progfunc;
+       uc_program_t *prog;
        uc_source_t *src;
 
        src = uc_source_new_file(path);
@@ -984,12 +985,12 @@ rpc_ucode_init_script(struct ubus_context *ctx, const char *path)
                return UBUS_STATUS_UNKNOWN_ERROR;
        }
 
-       progfunc = rpc_ucode_script_compile(path, src);
+       prog = rpc_ucode_script_compile(path, src);
 
-       if (!progfunc)
+       if (!prog)
                return UBUS_STATUS_UNKNOWN_ERROR;
 
-       script = rpc_ucode_script_execute(ctx, path, progfunc);
+       script = rpc_ucode_script_execute(ctx, path, prog);
 
        if (!script)
                return UBUS_STATUS_UNKNOWN_ERROR;