about summary refs log tree commit diff stats
path: root/src/wrapped/wrappedlibncurses6.c
diff options
context:
space:
mode:
authorptitSeb <sebastien.chev@gmail.com>2022-05-09 18:06:52 +0200
committerptitSeb <sebastien.chev@gmail.com>2022-05-09 18:06:52 +0200
commit6ef734960abfb83501cf2236ae41624c0375f570 (patch)
treec4870f8113a7dd23fdd4c1fbd26d7796fb6b6317 /src/wrapped/wrappedlibncurses6.c
parent244e3eafdf05ddef3b75c88c362ffc62ffbf2584 (diff)
downloadbox64-6ef734960abfb83501cf2236ae41624c0375f570.tar.gz
box64-6ef734960abfb83501cf2236ae41624c0375f570.zip
Some refactor on wrapped lib handling, to limit calloc/free used and get more straight forward usage of native wrapped functions (ported from box86)
Diffstat (limited to 'src/wrapped/wrappedlibncurses6.c')
-rwxr-xr-xsrc/wrapped/wrappedlibncurses6.c46
1 files changed, 5 insertions, 41 deletions
diff --git a/src/wrapped/wrappedlibncurses6.c b/src/wrapped/wrappedlibncurses6.c
index 164d9ceb..a41dacac 100755
--- a/src/wrapped/wrappedlibncurses6.c
+++ b/src/wrapped/wrappedlibncurses6.c
@@ -22,39 +22,15 @@
 const char* libncurses6Name = "libncurses.so.6";
 #define LIBNAME libncurses6
 
-static library_t* my_lib = NULL;
-
 // this is a simple copy of libncursesw wrapper. TODO: check if ok
 
 #define ADDED_FUNCTIONS() GO(stdscr, void*)
 #include "generated/wrappedlibncurses6types.h"
 
-typedef struct libncurses6_my_s {
-    // functions
-    #define GO(A, B)    B   A;
-    SUPER()
-    #undef GO
-} libncurses6_my_t;
-
-void* getNCurses6My(library_t* lib)
-{
-    libncurses6_my_t* my = (libncurses6_my_t*)calloc(1, sizeof(libncurses6_my_t));
-    #define GO(A, W) my->A = (W)dlsym(lib->priv.w.lib, #A);
-    SUPER()
-    #undef GO
-    return my;
-}
-#undef SUPER
-
-void freeNCurses6My(void* lib)
-{
-    //libncurses6_my_t *my = (libncurses6_my_t *)lib;
-}
+#include "wrappercallback.h"
 
 EXPORT int my6_mvwprintw(x64emu_t* emu, void* win, int32_t y, int32_t x, void* fmt, void* b)
 {
-    libncurses6_my_t *my = (libncurses6_my_t*)my_lib->priv.w.p2;
-
     char* buf = NULL;
     myStackAlign(emu, (const char*)fmt, b, emu->scratch, R_EAX, 4);
     PREPARE_VALIST;
@@ -68,8 +44,6 @@ EXPORT int my6_mvwprintw(x64emu_t* emu, void* win, int32_t y, int32_t x, void* f
 
 EXPORT int my6_printw(x64emu_t* emu, void* fmt, void* b)
 {
-    libncurses6_my_t *my = (libncurses6_my_t*)my_lib->priv.w.p2;
-
     myStackAlign(emu, (const char*)fmt, b, emu->scratch, R_EAX, 1);
     PREPARE_VALIST;
     return my->vwprintw(my->stdscr, fmt, VARARGS);
@@ -77,8 +51,6 @@ EXPORT int my6_printw(x64emu_t* emu, void* fmt, void* b)
 
 EXPORT int my6_vwprintw(x64emu_t* emu, void* p, void* fmt, x64_va_list_t b)
 {
-    libncurses6_my_t *my = (libncurses6_my_t*)my_lib->priv.w.p2;
-
     #ifdef CONVERT_VALIST
     CONVERT_VALIST(b);
     #else
@@ -90,8 +62,6 @@ EXPORT int my6_vwprintw(x64emu_t* emu, void* p, void* fmt, x64_va_list_t b)
 
 EXPORT int my6_mvprintw(x64emu_t* emu, int x, int y, void* fmt, void* b)
 {
-    libncurses6_my_t *my = (libncurses6_my_t*)my_lib->priv.w.p2;
-
     char* buf = NULL;
     myStackAlign(emu, (const char*)fmt, b, emu->scratch, R_EAX, 3);
     PREPARE_VALIST;
@@ -105,23 +75,17 @@ EXPORT int my6_mvprintw(x64emu_t* emu, int x, int y, void* fmt, void* b)
 
 EXPORT void* my6_initscr()
 {
-    libncurses6_my_t *my = (libncurses6_my_t*)my_lib->priv.w.p2;
     void* ret = my->initscr();
     my_checkGlobalTInfo();
     return ret;
 }
 
 #define CUSTOM_INIT \
-    lib->priv.w.p2 = getNCurses6My(lib);    \
-    my_lib = lib;                           \
-    lib->altmy = strdup("my6_");            \
-    lib->priv.w.needed = 1;                 \
-    lib->priv.w.neededlibs = (char**)calloc(lib->priv.w.needed, sizeof(char*)); \
-    lib->priv.w.neededlibs[0] = strdup("libtinfo.so.6");
+    getMy(lib);     \
+    SETALT(my6_);   \
+    setNeededLibs(&lib->priv.w, 1, "libtinfo.so.6");
 
 #define CUSTOM_FINI \
-    freeNCurses6My(lib->priv.w.p2); \
-    free(lib->priv.w.p2);           \
-    my_lib = NULL;
+    freeMy();
 
 #include "wrappedlib_init.h"