about summary refs log tree commit diff stats
path: root/src/wrapped/wrappedglib2.c
diff options
context:
space:
mode:
authorptitSeb <sebastien.chev@gmail.com>2023-02-04 10:39:56 +0100
committerptitSeb <sebastien.chev@gmail.com>2023-02-04 10:39:56 +0100
commit07be0c6ef48af3a00ed85fcd4399eb9af645bbe9 (patch)
tree7bb16aef292471ee64848a93a43b563cdfd72392 /src/wrapped/wrappedglib2.c
parent78a336c092b9cf5ff48f970d670cb995f64c9e4f (diff)
downloadbox64-07be0c6ef48af3a00ed85fcd4399eb9af645bbe9.tar.gz
box64-07be0c6ef48af3a00ed85fcd4399eb9af645bbe9.zip
Added some more wrapped functions to glib2 and gobject2 (for #503)
Diffstat (limited to 'src/wrapped/wrappedglib2.c')
-rwxr-xr-xsrc/wrapped/wrappedglib2.c82
1 files changed, 80 insertions, 2 deletions
diff --git a/src/wrapped/wrappedglib2.c b/src/wrapped/wrappedglib2.c
index b481963d..7b3cccc2 100755
--- a/src/wrapped/wrappedglib2.c
+++ b/src/wrapped/wrappedglib2.c
@@ -87,7 +87,7 @@ GO(8)   \
 GO(9)   \
 
 // GCopyFct
-/*#define GO(A)   \
+#define GO(A)   \
 static uintptr_t my_copy_fct_##A = 0;   \
 static void* my_copy_##A(void* data)     \
 {                                       \
@@ -107,7 +107,7 @@ static void* findCopyFct(void* fct)
     #undef GO
     printf_log(LOG_NONE, "Warning, no more slot for glib2 Copy callback\n");
     return NULL;
-}*/
+}
 // GFreeFct
 #define GO(A)   \
 static uintptr_t my_free_fct_##A = 0;   \
@@ -663,6 +663,50 @@ static void* reverseGOptionArgFct(void* fct)
     #undef GO
     return NULL;
 }
+// GNodeTraverseFunc ...
+#define GO(A)   \
+static uintptr_t my_GNodeTraverseFunc_fct_##A = 0;                              \
+static int my_GNodeTraverseFunc_##A(void* a, void* b)                           \
+{                                                                               \
+    return (int)RunFunction(my_context, my_GNodeTraverseFunc_fct_##A, 2, a, b); \
+}
+SUPER()
+#undef GO
+static void* findGNodeTraverseFuncFct(void* fct)
+{
+    if(!fct) return fct;
+    if(GetNativeFnc((uintptr_t)fct))  return GetNativeFnc((uintptr_t)fct);
+    #define GO(A) if(my_GNodeTraverseFunc_fct_##A == (uintptr_t)fct) return my_GNodeTraverseFunc_##A;
+    SUPER()
+    #undef GO
+    #define GO(A) if(my_GNodeTraverseFunc_fct_##A == 0) {my_GNodeTraverseFunc_fct_##A = (uintptr_t)fct; return my_GNodeTraverseFunc_##A; }
+    SUPER()
+    #undef GO
+    printf_log(LOG_NONE, "Warning, no more slot for glib2 GNodeTraverseFunc callback\n");
+    return NULL;
+}
+// GThreadFunc ...
+#define GO(A)   \
+static uintptr_t my_GThreadFunc_fct_##A = 0;                            \
+static void* my_GThreadFunc_##A(void* a)                                \
+{                                                                       \
+    return (void*)RunFunction(my_context, my_GThreadFunc_fct_##A, 1, a);\
+}
+SUPER()
+#undef GO
+static void* findGThreadFuncFct(void* fct)
+{
+    if(!fct) return fct;
+    if(GetNativeFnc((uintptr_t)fct))  return GetNativeFnc((uintptr_t)fct);
+    #define GO(A) if(my_GThreadFunc_fct_##A == (uintptr_t)fct) return my_GThreadFunc_##A;
+    SUPER()
+    #undef GO
+    #define GO(A) if(my_GThreadFunc_fct_##A == 0) {my_GThreadFunc_fct_##A = (uintptr_t)fct; return my_GThreadFunc_##A; }
+    SUPER()
+    #undef GO
+    printf_log(LOG_NONE, "Warning, no more slot for glib2 GThreadFunc callback\n");
+    return NULL;
+}
 
 #undef SUPER
 
@@ -1300,6 +1344,40 @@ EXPORT void* my_g_strconcat(x64emu_t* emu, void* first, uintptr_t* data)
     return p;
 }
 
+EXPORT void* my_g_markup_parse_context_new(x64emu_t* emu, void* parser, int flags, void* data, void* destroy)
+{
+    return my->g_markup_parse_context_new(parser, flags, data, findDestroyFct(destroy));
+}
+
+EXPORT void my_g_list_foreach(x64emu_t* emu, void* list, void* func, void* data)
+{
+    my->g_list_foreach(list, findGFuncFct(func), data);
+}
+
+EXPORT void* my_g_list_insert_sorted(x64emu_t* emu, void* list, void* data, void* f)
+{
+    return my->g_list_insert_sorted(list, data, findGCompareFuncFct(f));
+}
+
+EXPORT void my_g_node_traverse(x64emu_t* emu, void* node, int order, int flags, int depth, void* f, void* data)
+{
+    my->g_node_traverse(node, order, flags, depth, findGNodeTraverseFuncFct(f), data);
+}
+
+EXPORT void* my_g_node_copy_deep(x64emu_t* emu, void* node, void* f, void* data)
+{
+    return my->g_node_copy_deep(node, findCopyFct(f), data);
+}
+
+EXPORT void* my_g_thread_try_new(x64emu_t* emu, void* name, void* f, void* data, void* err)
+{
+    return my->g_thread_try_new(name, findGThreadFuncFct(f), data, err);
+}
+
+EXPORT void my_g_slist_free_full(x64emu_t* emu, void* list, void* f)
+{
+    my->g_slist_free_full(list, findDestroyFct(f));
+}
 
 #define PRE_INIT    \
     if(box64_nogtk) \