about summary refs log tree commit diff stats
path: root/src/wrapped/wrappedglib2.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/wrapped/wrappedglib2.c')
-rw-r--r--src/wrapped/wrappedglib2.c27
1 files changed, 27 insertions, 0 deletions
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;