diff options
Diffstat (limited to 'src/load.c')
-rw-r--r-- | src/load.c | 29 |
1 files changed, 7 insertions, 22 deletions
@@ -6,6 +6,8 @@ #include <dlfcn.h> #include "common/err.h" #include "common/str.h" +#include "common/file.h" +#include "common/dl.h" #include "load.h" #include "parse.h" @@ -33,18 +35,6 @@ static char *dirname_wrapper(const char *name) return wrap_name_func(name, &dirname); } -static bool file_exists(const char *filename) -{ - FILE *f = fopen(filename, "r"); - - if (f) { - fclose(f); - return true; - } - - return false; -} - // type definitions typedef struct @@ -122,7 +112,7 @@ static Module *require_module(LoadState *state, char *module_path) char *filename = get_filename(module_path); if (! filename) - error("error: module %s not found\n", module_path); + error("module error: module %s not found\n", module_path); size_t filename_len = strlen(filename); UwUVMModuleType type = (filename_len >= 3 && strcmp(filename + filename_len - 3, ".so") == 0) ? MODULE_NATIVE : MODULE_PLAIN; @@ -148,9 +138,7 @@ static Module *require_module(LoadState *state, char *module_path) state->program.libraries = realloc(state->program.libraries, sizeof(void *) * ++state->program.num_libraries); state->program.libraries[state->program.num_libraries - 1] = module->handle.lib = dlopen(filename, RTLD_LAZY); - char *err = dlerror(); - if (err) - error("library error: %s\n", err); + check_dlerror(); } return module; @@ -192,7 +180,7 @@ static UwUVMFunction *resolve_function(LoadState *state, Module *caller_module, fnname++; if (*fnname == '\0') - error("error: empty function name\n"); + error("module error: empty function name referenced/called by module %s\n", caller_module->filename); Module *callee_module; @@ -287,16 +275,13 @@ static void load_functions(LoadState *state, Module *module) *function = NULL; } else { - error("error: no function %s in module %s\n", link->name, module->filename); + error("module error: no function %s in module %s\n", link->name, module->filename); } } else { char *symbol = asprintf_wrapper("uwu_%s", link->name); link->ref->value.native = dlsym(module->handle.lib, symbol); - char *err = dlerror(); - if (err) - error("library error: %s\n", err); - + check_dlerror(); free(symbol); } } |