aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--common/dl.h14
-rw-r--r--common/err.h4
-rw-r--r--common/file.h19
-rw-r--r--common/str.h4
-rw-r--r--src/load.c23
-rw-r--r--src/run.c5
6 files changed, 43 insertions, 26 deletions
diff --git a/common/dl.h b/common/dl.h
new file mode 100644
index 0000000..143b422
--- /dev/null
+++ b/common/dl.h
@@ -0,0 +1,14 @@
+#ifndef _COMMON_DL_H_
+#define _COMMON_DL_H_
+
+#include <dlfcn.h>
+#include "err.h"
+
+inline static void check_dlerror()
+{
+ char *err = dlerror();
+ if (err)
+ error("library error: %s\n", err);
+}
+
+#endif
diff --git a/common/err.h b/common/err.h
index 1dccbf9..34620bb 100644
--- a/common/err.h
+++ b/common/err.h
@@ -1,5 +1,5 @@
-#ifndef _ERR_H_
-#define _ERR_H_
+#ifndef _COMMON_ERR_H_
+#define _COMMON_ERR_H_
#include <stdio.h>
#include <stdlib.h>
diff --git a/common/file.h b/common/file.h
new file mode 100644
index 0000000..c5e8036
--- /dev/null
+++ b/common/file.h
@@ -0,0 +1,19 @@
+#ifndef _COMMON_FILE_H_
+#define _COMMON_FILE_H_
+
+#include <stdio.h>
+#include <stdbool.h>
+
+inline static bool file_exists(const char *filename)
+{
+ FILE *f = fopen(filename, "r");
+
+ if (f) {
+ fclose(f);
+ return true;
+ }
+
+ return false;
+}
+
+#endif
diff --git a/common/str.h b/common/str.h
index b0baa37..fc5f587 100644
--- a/common/str.h
+++ b/common/str.h
@@ -1,5 +1,5 @@
-#ifndef _UTIL_H_
-#define _UTIL_H_
+#ifndef _COMMON_STR_H_
+#define _COMMON_STR_H_
#include <stdio.h>
#include <stdarg.h>
diff --git a/src/load.c b/src/load.c
index edeba97..aeee1c2 100644
--- a/src/load.c
+++ b/src/load.c
@@ -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
@@ -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;
@@ -293,10 +281,7 @@ static void load_functions(LoadState *state, Module *module)
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);
}
}
diff --git a/src/run.c b/src/run.c
index 7733c8d..36133fc 100644
--- a/src/run.c
+++ b/src/run.c
@@ -2,6 +2,7 @@
#include <stdlib.h>
#include <stdio.h>
#include "common/err.h"
+#include "common/dl.h"
#include "load.h"
#include "run.h"
@@ -29,9 +30,7 @@ void run_module(const char *progname, const char *modname, size_t num_args, char
char *(*uwuvm_print_value )(UwUVMValue ) = dlsym(program.api_library, "uwuvm_print_value" );
void (*uwuvm_delet_value )(UwUVMValue ) = dlsym(program.api_library, "uwuvm_delet_value" );
- char *err = dlerror();
- if (err)
- error("library error: %s\n", err);
+ check_dlerror();
UwUVMExpression arg_expressions[num_args];