diff options
author | Jo-Philipp Wich <jo@mein.io> | 2022-03-22 13:38:46 +0100 |
---|---|---|
committer | Jo-Philipp Wich <jo@mein.io> | 2022-03-22 13:38:46 +0100 |
commit | 8b5dc6079f1f9fcfb6535ba305c9352488bdd5ab (patch) | |
tree | 2fc39ec8cd67b8913a7bf1d565fad6f6ca5ad923 | |
parent | 3eaca1db52be980f62aed281fedf319eff599fbd (diff) |
lib: provide API function to obtain stdlib function implementations
Provide a new API function `uc_stdlib_function()` which allows to fetch
the C implementation of the given named standard library function.
This is useful for loadable modules or applications that embed ucode which
want to reuse core functions such as `sprintf()`.
Signed-off-by: Jo-Philipp Wich <jo@mein.io>
-rw-r--r-- | include/ucode/lib.h | 1 | ||||
-rw-r--r-- | lib.c | 12 |
2 files changed, 13 insertions, 0 deletions
diff --git a/include/ucode/lib.h b/include/ucode/lib.h index 095956a..a80844d 100644 --- a/include/ucode/lib.h +++ b/include/ucode/lib.h @@ -29,6 +29,7 @@ typedef struct { extern const uc_function_list_t uc_stdlib_functions[]; void uc_stdlib_load(uc_value_t *scope); +uc_cfn_ptr_t uc_stdlib_function(const char *name); bool uc_source_context_format(uc_stringbuf_t *buf, uc_source_t *src, size_t off, bool compact); bool uc_error_context_format(uc_stringbuf_t *buf, uc_source_t *src, uc_value_t *stacktrace, size_t off); @@ -3194,3 +3194,15 @@ uc_stdlib_load(uc_value_t *scope) { uc_function_list_register(scope, uc_stdlib_functions); } + +uc_cfn_ptr_t +uc_stdlib_function(const char *name) +{ + size_t i; + + for (i = 0; i < ARRAY_SIZE(uc_stdlib_functions); i++) + if (!strcmp(uc_stdlib_functions[i].name, name)) + return uc_stdlib_functions[i].func; + + return NULL; +} |