about summary refs log tree commit diff stats
path: root/src/wrapped/wrappedlib_init.h
diff options
context:
space:
mode:
authorrajdakin <rajdakin@gmail.com>2024-02-10 15:06:08 +0100
committerGitHub <noreply@github.com>2024-02-10 15:06:08 +0100
commitb527ebbf5be0949df3b9dcf0806109acc8119476 (patch)
treed9687f665b8e3a1facc15be822463bf7d274dacd /src/wrapped/wrappedlib_init.h
parentad55cfde7f61395618991543694b35183f9c6ad7 (diff)
downloadbox64-b527ebbf5be0949df3b9dcf0806109acc8119476.tar.gz
box64-b527ebbf5be0949df3b9dcf0806109acc8119476.zip
Wrapped libraries refactor (#1257)
* [MISC] Removed a warning caused by tab/space mismatch

* [WRAPPED] Factored out `getMy` and `freeMy` calls

* [WRAPPED] Small cleanup of the init header

* [WRAPPED] Factored out `SETALT`

* [WRAPPED] Factored out needed libs
Diffstat (limited to 'src/wrapped/wrappedlib_init.h')
-rw-r--r--src/wrapped/wrappedlib_init.h48
1 files changed, 36 insertions, 12 deletions
diff --git a/src/wrapped/wrappedlib_init.h b/src/wrapped/wrappedlib_init.h
index 75459d70..44af7c90 100644
--- a/src/wrapped/wrappedlib_init.h
+++ b/src/wrapped/wrappedlib_init.h
@@ -114,6 +114,18 @@ static const map_onedata_t MAPNAME(mydatamap)[] = {
 #undef DOIT
 #undef _DOIT
 
+#if !defined(ALTNAME) && defined(ALTNAME2)
+#error Please define ALTNAME before defining ALTNAME2
+#endif
+
+#define COUNT_NARGS(...) COUNT_NARGS_AUX(__VA_ARGS__, 5, 4, 3, 2, 1, 0)
+#define COUNT_NARGS_AUX(_1, _2, _3, _4, _5, n, ...) COUNT_NARGS_AUX##n(This should not appear, too many libraries)
+#define COUNT_NARGS_AUX1(v1, v2) 1
+#define COUNT_NARGS_AUX2(v1, v2) 2
+#define COUNT_NARGS_AUX3(v1, v2) 3
+#define COUNT_NARGS_AUX4(v1, v2) 4
+#define COUNT_NARGS_AUX5(v1, v2) 5
+
 int FUNC(_init)(library_t* lib, box64context_t* box64)
 {
     (void)box64;
@@ -127,17 +139,18 @@ int FUNC(_init)(library_t* lib, box64context_t* box64)
         lib->w.lib = dlopen(MAPNAME(Name), RTLD_LAZY | RTLD_GLOBAL);
         if(!lib->w.lib) {
 #ifdef ALTNAME
-        lib->w.lib = dlopen(ALTNAME, RTLD_LAZY | RTLD_GLOBAL);
-        if(!lib->w.lib)
-#endif
+            lib->w.lib = dlopen(ALTNAME, RTLD_LAZY | RTLD_GLOBAL);
+            if(!lib->w.lib) {
 #ifdef ALTNAME2
-            {
-            lib->w.lib = dlopen(ALTNAME2, RTLD_LAZY | RTLD_GLOBAL);
-            if(!lib->w.lib)
+                lib->w.lib = dlopen(ALTNAME2, RTLD_LAZY | RTLD_GLOBAL);
+                if(!lib->w.lib)
+#endif
 #endif
                 return -1;
+#ifdef ALTNAME
 #ifdef ALTNAME2
                 else lib->path = box_strdup(ALTNAME2);
+#endif
             } else lib->path = box_strdup(ALTNAME);
 #endif
         } else lib->path = box_strdup(MAPNAME(Name));
@@ -150,8 +163,8 @@ int FUNC(_init)(library_t* lib, box64context_t* box64)
 
     // populates maps...
 #define DOIT(mapname) \
-	cnt = sizeof(MAPNAME(mapname))/sizeof(map_onesymbol_t);                         \
-	for (int i = 0; i < cnt; ++i) {                                                 \
+    cnt = sizeof(MAPNAME(mapname))/sizeof(map_onesymbol_t);                         \
+    for (int i = 0; i < cnt; ++i) {                                                 \
         if (MAPNAME(mapname)[i].weak) {                                             \
             k = kh_put(symbolmap, lib->w.w##mapname, MAPNAME(mapname)[i].name, &ret); \
             kh_value(lib->w.w##mapname, k).w = MAPNAME(mapname)[i].w;               \
@@ -163,9 +176,9 @@ int FUNC(_init)(library_t* lib, box64context_t* box64)
         }                                                                           \
         if (strchr(MAPNAME(mapname)[i].name, '@'))                                  \
             AddDictionnary(box64->versym, MAPNAME(mapname)[i].name);                \
-	}
-	DOIT(symbolmap)
-	DOIT(mysymbolmap)
+    }
+    DOIT(symbolmap)
+    DOIT(mysymbolmap)
 #undef DOIT
     cnt = sizeof(MAPNAME(stsymbolmap))/sizeof(map_onesymbol_t);
     for (int i=0; i<cnt; ++i) {
@@ -200,18 +213,29 @@ int FUNC(_init)(library_t* lib, box64context_t* box64)
         k = kh_put(datamap, lib->w.mydatamap, MAPNAME(mydatamap)[i].name, &ret);
         kh_value(lib->w.mydatamap, k) = MAPNAME(mydatamap)[i].sz;
     }
+#ifdef ALTMY
+    SETALT(ALTMY);
+#endif
+#ifdef HAS_MY
+    getMy(lib);
+#endif
 #ifdef CUSTOM_INIT
     CUSTOM_INIT
 #endif
+#ifdef NEEDED_LIBS
+    setNeededLibs(lib, COUNT_NARGS(NEEDED_LIBS), NEEDED_LIBS);
+#endif
 
     return 0;
 }
 
 void FUNC(_fini)(library_t* lib)
 {
+#ifdef HAS_MY
+    freeMy();
+#endif
 #ifdef CUSTOM_FINI
     CUSTOM_FINI
 #endif
     WrappedLib_FinishFini(lib);
 }
-