about summary refs log tree commit diff stats
diff options
context:
space:
mode:
authorptitSeb <seebastien.chev@gmail.com>2023-09-02 16:58:35 +0200
committerptitSeb <seebastien.chev@gmail.com>2023-09-02 16:58:35 +0200
commit728ec2e769dce92c32513a30b01845a97f3762d7 (patch)
treedb2b017ea186e086062fce12fd4bfbaaabe02c65
parent25a064f3a8da90626b8c33fc01bb1e1bd0b4c4c8 (diff)
downloadbox64-728ec2e769dce92c32513a30b01845a97f3762d7.tar.gz
box64-728ec2e769dce92c32513a30b01845a97f3762d7.zip
Added 1 wrapped function (for #229)
-rw-r--r--src/wrapped/generated/functions_list.txt1
-rw-r--r--src/wrapped/generated/wrappedglib2types.h1
-rw-r--r--src/wrapped/wrappedglib2.c27
-rw-r--r--src/wrapped/wrappedglib2_private.h2
4 files changed, 30 insertions, 1 deletions
diff --git a/src/wrapped/generated/functions_list.txt b/src/wrapped/generated/functions_list.txt
index 2716c3a6..bde33193 100644
--- a/src/wrapped/generated/functions_list.txt
+++ b/src/wrapped/generated/functions_list.txt
@@ -3305,6 +3305,7 @@ wrappedglib2:
   - g_hash_table_foreach
   - g_list_foreach
   - g_option_context_add_main_entries
+  - g_option_group_set_parse_hooks
   - g_ptr_array_foreach
   - g_ptr_array_sort_with_data
   - g_static_private_set
diff --git a/src/wrapped/generated/wrappedglib2types.h b/src/wrapped/generated/wrappedglib2types.h
index a80a71e1..fe5a9006 100644
--- a/src/wrapped/generated/wrappedglib2types.h
+++ b/src/wrapped/generated/wrappedglib2types.h
@@ -108,6 +108,7 @@ typedef int32_t (*iFpppippppppp_t)(void*, void*, void*, int32_t, void*, void*, v
 	GO(g_hash_table_foreach, vFppp_t) \
 	GO(g_list_foreach, vFppp_t) \
 	GO(g_option_context_add_main_entries, vFppp_t) \
+	GO(g_option_group_set_parse_hooks, vFppp_t) \
 	GO(g_ptr_array_foreach, vFppp_t) \
 	GO(g_ptr_array_sort_with_data, vFppp_t) \
 	GO(g_static_private_set, vFppp_t) \
diff --git a/src/wrapped/wrappedglib2.c b/src/wrapped/wrappedglib2.c
index 5614314d..5c10638b 100644
--- a/src/wrapped/wrappedglib2.c
+++ b/src/wrapped/wrappedglib2.c
@@ -664,6 +664,28 @@ static void* reverseGOptionArgFct(void* fct)
     #undef GO
     return (void*)AddCheckBridge(my_lib->w.bridge, iFpppp, fct, 0, "GOptionArgFunc");
 }
+// GOptionParse ...
+#define GO(A)   \
+static uintptr_t my_GOptionParse_fct_##A = 0;                                            \
+static int my_GOptionParse_##A(void* a, void* b, void* c, void* d)                       \
+{                                                                                      \
+    return (int)RunFunctionFmt(my_GOptionParse_fct_##A, "pppp", a, b, c, d); \
+}
+SUPER()
+#undef GO
+static void* findGOptionParseFct(void* fct)
+{
+    if(!fct) return fct;
+    if(GetNativeFnc((uintptr_t)fct))  return GetNativeFnc((uintptr_t)fct);
+    #define GO(A) if(my_GOptionParse_fct_##A == (uintptr_t)fct) return my_GOptionParse_##A;
+    SUPER()
+    #undef GO
+    #define GO(A) if(my_GOptionParse_fct_##A == 0) {my_GOptionParse_fct_##A = (uintptr_t)fct; return my_GOptionParse_##A; }
+    SUPER()
+    #undef GO
+    printf_log(LOG_NONE, "Warning, no more slot for glib2 GOptionParse callback\n");
+    return NULL;
+}
 // GNodeTraverseFunc ...
 #define GO(A)   \
 static uintptr_t my_GNodeTraverseFunc_fct_##A = 0;                                    \
@@ -1393,6 +1415,11 @@ EXPORT void* my_g_list_insert_sorted_with_data(x64emu_t* emu, void* list, void*
     return my->g_list_insert_sorted_with_data(list, data, findGCompareDataFuncFct(f), user);
 }
 
+EXPORT void my_g_option_group_set_parse_hooks(x64emu_t* emu, void* group, void* preparse, void* postparse)
+{
+    my->g_option_group_set_parse_hooks(group, findGOptionParseFct(preparse), findGOptionParseFct(postparse));
+}
+
 #define PRE_INIT    \
     if(box64_nogtk) \
         return -1;
diff --git a/src/wrapped/wrappedglib2_private.h b/src/wrapped/wrappedglib2_private.h
index 6ee782f4..c5285b9d 100644
--- a/src/wrapped/wrappedglib2_private.h
+++ b/src/wrapped/wrappedglib2_private.h
@@ -785,7 +785,7 @@ GO(g_option_group_free, vFp)
 GOM(g_option_group_new, pFEppppp)
 GO(g_option_group_ref, pFp) // 2.44+
 //GOM(g_option_group_set_error_hook, vFEpB)
-//GOM(g_option_group_set_parse_hooks, vFEpBB)
+GOM(g_option_group_set_parse_hooks, vFEppp)
 //GOM(g_option_group_set_translate_func, vFEpBpB)
 GO(g_option_group_set_translation_domain, vFpp)
 GO(g_option_group_unref, vFp)   // 2.44+