From 06bbf93bf876c107ff41593a75fe6fa8a6d6a779 Mon Sep 17 00:00:00 2001 From: ptitSeb Date: Mon, 20 Sep 2021 21:51:15 +0200 Subject: More work on gtk wrapping --- src/include/gtkclass.h | 8 + src/include/myalign.h | 2 + src/libtools/myalign.c | 7 + src/tools/gtkclass.c | 271 ++++++++++++++++++++++++++-- src/wrapped/generated/functions_list.txt | 37 +++- src/wrapped/generated/wrappedgio2types.h | 4 + src/wrapped/generated/wrappedglib2types.h | 15 ++ src/wrapped/generated/wrappedgtkx112types.h | 5 + src/wrapped/generated/wrapper.c | 26 +-- src/wrapped/generated/wrapper.h | 13 +- src/wrapped/wrappedgio2.c | 31 +++- src/wrapped/wrappedgio2_private.h | 4 +- src/wrapped/wrappedglib2.c | 141 ++++++++++++++- src/wrapped/wrappedglib2_private.h | 30 +-- src/wrapped/wrappedgobject2.c | 1 + src/wrapped/wrappedgtkx112.c | 65 ++++++- src/wrapped/wrappedgtkx112_private.h | 8 +- 17 files changed, 584 insertions(+), 84 deletions(-) (limited to 'src') diff --git a/src/include/gtkclass.h b/src/include/gtkclass.h index 53921591..9a8a512d 100755 --- a/src/include/gtkclass.h +++ b/src/include/gtkclass.h @@ -221,6 +221,11 @@ typedef struct my_GtkTableClass_s my_GtkContainerClass_t parent_class; } my_GtkTableClass_t; +typedef struct my_GtkFixedClass_s +{ + my_GtkContainerClass_t parent_class; +} my_GtkFixedClass_t; + // GTypeValueTable typedef struct my_GTypeValueTable_s { void (*value_init) (void* value); @@ -287,6 +292,7 @@ GTKCLASS(GtkTreeView) \ GTKCLASS(GtkBin) \ GTKCLASS(GtkWindow) \ GTKCLASS(GtkTable) \ +GTKCLASS(GtkFixed) \ GTKCLASS(MetaFrames) \ #define GTKCLASS(A) void Set##A##ID(size_t id); @@ -313,4 +319,6 @@ void my_signal_delete(my_signal_t* sig); int my_signal_is_valid(void* sig); int my_signal_cb(void* a, void* b, void* c, void* d); +void my_add_signal_offset(size_t klass, uint32_t offset, int n); + #endif //__GTKCLASS_H__ \ No newline at end of file diff --git a/src/include/myalign.h b/src/include/myalign.h index 80cc1449..b711e874 100755 --- a/src/include/myalign.h +++ b/src/include/myalign.h @@ -149,3 +149,5 @@ void AlignEpollEvent(void* dest, void* source, int nbr); // x86 -> Arm void UnalignSemidDs(void *dest, const void* source); void AlignSemidDs(void *dest, const void* source); + +uintptr_t getVArgs(x64emu_t* emu, int pos, uintptr_t* b, int N); \ No newline at end of file diff --git a/src/libtools/myalign.c b/src/libtools/myalign.c index 181242f3..3c6f6b3f 100755 --- a/src/libtools/myalign.c +++ b/src/libtools/myalign.c @@ -801,3 +801,10 @@ void AlignSemidDs(void *dest, const void* source) arm_struct->sem_ctime = x64_struct->sem_ctime; arm_struct->sem_nsems = x64_struct->sem_nsems; } + +uintptr_t getVArgs(x64emu_t* emu, int pos, uintptr_t* b, int N) +{ + if((pos+N)>6) + return b[pos+N-6]; + return emu->regs[regs_abi[pos+N]].q[0]; +} \ No newline at end of file diff --git a/src/tools/gtkclass.c b/src/tools/gtkclass.c index 6a664dc1..38896fd5 100755 --- a/src/tools/gtkclass.c +++ b/src/tools/gtkclass.c @@ -26,6 +26,19 @@ GTKCLASSES() KHASH_SET_INIT_INT(signalmap) static kh_signalmap_t *my_signalmap = NULL; +typedef struct sigoffset_s { + uint32_t offset; + int n; +} sigoffset_t; +typedef struct sigoffset_array_s { + sigoffset_t *a; + int cap; + int sz; +} sigoffset_array_t; + +KHASH_MAP_INIT_INT64(sigoffset, sigoffset_array_t) +static kh_sigoffset_t *my_sigoffset = NULL; + // ---- Defining the multiple functions now ----- #define SUPER() \ GO(0) \ @@ -651,6 +664,24 @@ static void bridgeGtkTableClass(my_GtkTableClass_t* class) bridgeGtkContainerClass(&class->parent_class); } +// ----- GtkFixedClass ------ + +// wrap (so bridge all calls, just in case) +static void wrapGtkFixedClass(my_GtkFixedClass_t* class) +{ + wrapGtkContainerClass(&class->parent_class); +} +// unwrap (and use callback if not a native call anymore) +static void unwrapGtkFixedClass(my_GtkFixedClass_t* class) +{ + unwrapGtkContainerClass(&class->parent_class); +} +// autobridge +static void bridgeGtkFixedClass(my_GtkFixedClass_t* class) +{ + bridgeGtkContainerClass(&class->parent_class); +} + // ----- MetaFramesClass ------ // wrap (so bridge all calls, just in case) @@ -972,8 +1003,196 @@ my_GTypeValueTable_t* findFreeGTypeValueTable(my_GTypeValueTable_t* fcts) return NULL; } +// signal2 ... +#define GO(A) \ +static uintptr_t my_signal2_fct_##A = 0; \ +static void* my_signal2_##A(void* a, void* b) \ +{ \ + return (void*)RunFunction(my_context, my_signal2_fct_##A, 2, a, b); \ +} +SUPER() +#undef GO +static void* find_signal2_Fct(void* fct) +{ + if(!fct) return fct; + if(GetNativeFnc((uintptr_t)fct)) return GetNativeFnc((uintptr_t)fct); + #define GO(A) if(my_signal2_fct_##A == (uintptr_t)fct) return my_signal2_##A; + SUPER() + #undef GO + #define GO(A) if(my_signal2_fct_##A == 0) {my_signal2_fct_##A = (uintptr_t)fct; return my_signal2_##A; } + SUPER() + #undef GO + printf_log(LOG_NONE, "Warning, no more slot for GTypeInfo signal2 callback\n"); + return NULL; +} +// signal3 ... +#define GO(A) \ +static uintptr_t my_signal3_fct_##A = 0; \ +static void* my_signal3_##A(void* a, void* b, void* c) \ +{ \ + return (void*)RunFunction(my_context, my_signal3_fct_##A, 3, a, b, c); \ +} +SUPER() +#undef GO +static void* find_signal3_Fct(void* fct) +{ + if(!fct) return fct; + if(GetNativeFnc((uintptr_t)fct)) return GetNativeFnc((uintptr_t)fct); + #define GO(A) if(my_signal3_fct_##A == (uintptr_t)fct) return my_signal3_##A; + SUPER() + #undef GO + #define GO(A) if(my_signal3_fct_##A == 0) {my_signal3_fct_##A = (uintptr_t)fct; return my_signal3_##A; } + SUPER() + #undef GO + printf_log(LOG_NONE, "Warning, no more slot for GTypeInfo signal3 callback\n"); + return NULL; +} +// signal4 ... +#define GO(A) \ +static uintptr_t my_signal4_fct_##A = 0; \ +static void* my_signal4_##A(void* a, void* b, void* c, void* d) \ +{ \ + return (void*)RunFunction(my_context, my_signal4_fct_##A, 4, a, b, c, d); \ +} +SUPER() +#undef GO +static void* find_signal4_Fct(void* fct) +{ + if(!fct) return fct; + if(GetNativeFnc((uintptr_t)fct)) return GetNativeFnc((uintptr_t)fct); + #define GO(A) if(my_signal4_fct_##A == (uintptr_t)fct) return my_signal4_##A; + SUPER() + #undef GO + #define GO(A) if(my_signal4_fct_##A == 0) {my_signal4_fct_##A = (uintptr_t)fct; return my_signal4_##A; } + SUPER() + #undef GO + printf_log(LOG_NONE, "Warning, no more slot for GTypeInfo signal4 callback\n"); + return NULL; +} +// signal5 ... +#define GO(A) \ +static uintptr_t my_signal5_fct_##A = 0; \ +static void* my_signal5_##A(void* a, void* b, void* c, void* d, void* e) \ +{ \ + return (void*)RunFunction(my_context, my_signal5_fct_##A, 5, a, b, c, d, e);\ +} +SUPER() +#undef GO +static void* find_signal5_Fct(void* fct) +{ + if(!fct) return fct; + if(GetNativeFnc((uintptr_t)fct)) return GetNativeFnc((uintptr_t)fct); + #define GO(A) if(my_signal5_fct_##A == (uintptr_t)fct) return my_signal5_##A; + SUPER() + #undef GO + #define GO(A) if(my_signal5_fct_##A == 0) {my_signal5_fct_##A = (uintptr_t)fct; return my_signal5_##A; } + SUPER() + #undef GO + printf_log(LOG_NONE, "Warning, no more slot for GTypeInfo signal5 callback\n"); + return NULL; +} +// signal6 ... +#define GO(A) \ +static uintptr_t my_signal6_fct_##A = 0; \ +static void* my_signal6_##A(void* a, void* b, void* c, void* d, void* e, void* f) \ +{ \ + return (void*)RunFunction(my_context, my_signal6_fct_##A, 6, a, b, c, d, e, f); \ +} +SUPER() +#undef GO +static void* find_signal6_Fct(void* fct) +{ + if(!fct) return fct; + if(GetNativeFnc((uintptr_t)fct)) return GetNativeFnc((uintptr_t)fct); + #define GO(A) if(my_signal6_fct_##A == (uintptr_t)fct) return my_signal6_##A; + SUPER() + #undef GO + #define GO(A) if(my_signal6_fct_##A == 0) {my_signal6_fct_##A = (uintptr_t)fct; return my_signal6_##A; } + SUPER() + #undef GO + printf_log(LOG_NONE, "Warning, no more slot for GTypeInfo signal6 callback\n"); + return NULL; +} +// signal7 ... +#define GO(A) \ +static uintptr_t my_signal7_fct_##A = 0; \ +static void* my_signal7_##A(void* a, void* b, void* c, void* d, void* e, void* f, void* g) \ +{ \ + return (void*)RunFunction(my_context, my_signal7_fct_##A, 7, a, b, c, d, e, f, g); \ +} +SUPER() +#undef GO +static void* find_signal7_Fct(void* fct) +{ + if(!fct) return fct; + if(GetNativeFnc((uintptr_t)fct)) return GetNativeFnc((uintptr_t)fct); + #define GO(A) if(my_signal7_fct_##A == (uintptr_t)fct) return my_signal7_##A; + SUPER() + #undef GO + #define GO(A) if(my_signal7_fct_##A == 0) {my_signal7_fct_##A = (uintptr_t)fct; return my_signal7_##A; } + SUPER() + #undef GO + printf_log(LOG_NONE, "Warning, no more slot for GTypeInfo signal7 callback\n"); + return NULL; +} +static const wrapper_t wrappers[] = {pFpp, pFppp, pFpppp, pFpppp, pFppppp, pFpppppp}; +typedef void* (*finder_t)(void*); +static const finder_t finders[] = {find_signal2_Fct, find_signal3_Fct, find_signal4_Fct, find_signal5_Fct, find_signal6_Fct, find_signal7_Fct}; +#define MAX_SIGNAL_N 7 // ---- GTypeInfo ---- +// let's handle signal with offset, that are used to wrap custom signal function +void my_unwrap_signal_offset(void* klass); +void my_add_signal_offset(size_t itype, uint32_t offset, int n) +{ + printf_log(LOG_DEBUG, "my_add_signal_offset(0x%zx, %d, %d)\n", itype, offset, n); + if(!offset || !itype) // no offset means no overload... + return; + if(n<0 || n>MAX_SIGNAL_N) { + printf_log(LOG_NONE, "Warning, signal with too many args (%d) in my_add_signal_offset\n", n); + return; + } + int ret; + khint_t k = kh_put(sigoffset, my_sigoffset, itype, &ret); + sigoffset_array_t *p = &kh_value(my_sigoffset, k); + if(ret) { + p->a = NULL; p->cap = 0; p->sz = 0; + } + // check if offset already there + for(int i=0; isz; ++i) + if(p->a[i].offset == offset) { + printf_log(LOG_INFO, "Offset already there... Bye\n"); + return; // already there, bye + } + if(p->sz==p->cap) { + p->cap+=4; + p->a = (sigoffset_t*)realloc(p->a, sizeof(sigoffset_t)*p->cap); + } + p->a[p->sz].offset = offset; + p->a[p->sz++].n = n; +} +void my_unwrap_signal_offset(void* klass) +{ + if(!klass) + return; + size_t itype = *(size_t*)klass; + khint_t k = kh_get(sigoffset, my_sigoffset, itype); + if(k==kh_end(my_sigoffset)) + return; + sigoffset_array_t *p = &kh_value(my_sigoffset, k); + printf_log(LOG_DEBUG, "my_unwrap_signal_offset(%p) type=0x%zx with %d signals with offset\n", klass, itype, p->sz); + for(int i=0; isz; ++i) { + void** f = (void**)((uintptr_t)klass + p->a[i].offset); + if(!GetNativeFnc((uintptr_t)*f)) { + // Not a native function: autobridge it + void* new_f = finders[p->a[i].n-2](f); + printf_log(LOG_DEBUG, "Unwrapping %p -> %p (with alternate)\n", *f, new_f); + if(!hasAlternate(new_f)) + addAlternate(new_f, *f); + *f = new_f; + } + } +} // First the structure my_GTypeInfo_t statics, with paired x64 source pointer #define GO(A) \ @@ -985,10 +1204,10 @@ SUPER() // Then the static functions callback that may be used with the structure // base_init ... #define GO(A) \ -static uintptr_t my_base_init_fct_##A = 0; \ -static int my_base_init_##A(void* a) \ -{ \ - return RunFunction(my_context, my_base_init_fct_##A, 1, a); \ +static uintptr_t my_base_init_fct_##A = 0; \ +static int my_base_init_##A(void* a) \ +{ \ + return RunFunction(my_context, my_base_init_fct_##A, 1, a); \ } SUPER() #undef GO @@ -1029,21 +1248,27 @@ static void* find_base_finalize_Fct(void* fct) } // class_init ... #define GO(A) \ -static uintptr_t my_class_init_fct_##A = 0; \ -static int my_class_init_##A(void* a, void* b) \ -{ \ - return RunFunction(my_context, my_class_init_fct_##A, 2, a, b); \ +static uintptr_t my_class_init_fct_##A = 0; \ +static size_t parent_class_init_##A = 0; \ +static int my_class_init_##A(void* a, void* b) \ +{ \ + printf_log(LOG_DEBUG, "Custom Class init %d for class %p (parent=%p)\n", A, a, (void*)parent_class_init_##A);\ + int ret = RunFunction(my_context, my_class_init_fct_##A, 2, a, b); \ + unwrapGTKClass(a, parent_class_init_##A); \ + bridgeGTKClass(a, parent_class_init_##A); \ + my_unwrap_signal_offset(a); \ + return ret; \ } SUPER() #undef GO -static void* find_class_init_Fct(void* fct) +static void* find_class_init_Fct(void* fct, size_t parent) { if(!fct) return fct; if(GetNativeFnc((uintptr_t)fct)) return GetNativeFnc((uintptr_t)fct); - #define GO(A) if(my_class_init_fct_##A == (uintptr_t)fct) return my_class_init_##A; + #define GO(A) if(my_class_init_fct_##A == (uintptr_t)fct && parent_class_init_##A==parent) return my_class_init_##A; SUPER() #undef GO - #define GO(A) if(my_class_init_fct_##A == 0) {my_class_init_fct_##A = (uintptr_t)fct; return my_class_init_##A; } + #define GO(A) if(my_class_init_fct_##A == 0) {my_class_init_fct_##A = (uintptr_t)fct; parent_class_init_##A=parent; return my_class_init_##A; } SUPER() #undef GO printf_log(LOG_NONE, "Warning, no more slot for GTypeInfo class_init callback\n"); @@ -1106,7 +1331,7 @@ my_GTypeInfo_t* findFreeGTypeInfo(my_GTypeInfo_t* fcts, size_t parent) my_gtypeinfo_##A.class_size = fcts->class_size; \ my_gtypeinfo_##A.base_init = find_base_init_Fct(fcts->base_init); \ my_gtypeinfo_##A.base_finalize = find_base_finalize_Fct(fcts->base_finalize); \ - my_gtypeinfo_##A.class_init = find_class_init_Fct(fcts->class_init); \ + my_gtypeinfo_##A.class_init = find_class_init_Fct(fcts->class_init, parent); \ my_gtypeinfo_##A.class_finalize = find_class_finalize_Fct(fcts->class_finalize);\ my_gtypeinfo_##A.class_data = fcts->class_data; \ my_gtypeinfo_##A.instance_size = fcts->instance_size; \ @@ -1132,11 +1357,14 @@ SUPER() #undef GO // Then the static functions callback that may be used with the structure #define GO(A) \ -static int fct_gtk_parent_##A = 0 ; \ -static uintptr_t fct_gtk_class_init_##A = 0; \ -static int my_gtk_class_init_##A(void* g_class) { \ - printf_log(LOG_DEBUG, "Calling fct_gtk_class_init_" #A " wrapper\n"); \ - return (int)RunFunction(my_context, fct_gtk_class_init_##A, 1, g_class); \ +static int fct_gtk_parent_##A = 0 ; \ +static uintptr_t fct_gtk_class_init_##A = 0; \ +static int my_gtk_class_init_##A(void* g_class) { \ + printf_log(LOG_DEBUG, "Calling fct_gtk_class_init_" #A " wrapper\n"); \ + int ret = (int)RunFunction(my_context, fct_gtk_class_init_##A, 1, g_class); \ + unwrapGTKClass(g_class, fct_gtk_parent_##A); \ + bridgeGTKClass(g_class, fct_gtk_parent_##A); \ + return ret; \ } \ static uintptr_t fct_gtk_object_init_##A = 0; \ static int my_gtk_object_init_##A(void* object, void* data) { \ @@ -1186,6 +1414,7 @@ void InitGTKClass(bridge_t *bridge) { my_bridge = bridge; my_signalmap = kh_init(signalmap); + my_sigoffset = kh_init(sigoffset); } void FiniGTKClass() @@ -1199,6 +1428,14 @@ void FiniGTKClass() kh_destroy(signalmap, my_signalmap); my_signalmap = NULL; } + if(my_sigoffset) { + sigoffset_array_t* p; + kh_foreach_value_ref(my_sigoffset, p, + free(p->a); + ); + kh_destroy(sigoffset, my_sigoffset); + my_sigoffset = NULL; + } } #define GTKCLASS(A) \ diff --git a/src/wrapped/generated/functions_list.txt b/src/wrapped/generated/functions_list.txt index 4634385a..ad5d80ae 100644 --- a/src/wrapped/generated/functions_list.txt +++ b/src/wrapped/generated/functions_list.txt @@ -223,12 +223,10 @@ #() pFii #() pFiu #() pFip -#() pFiV #() pFui #() pFuC #() pFuu #() pFup -#() pFuV #() pFUi #() pFdd #() pFlp @@ -313,7 +311,6 @@ #() vFppl #() vFppL #() vFppp -#() vFppV #() iFEiw #() iFEip #() iFEWW @@ -455,6 +452,7 @@ #() LFppL #() LFSpL #() pFEip +#() pFEiV #() pFEup #() pFEpi #() pFEpu @@ -621,7 +619,6 @@ #() vFpppd #() vFpppL #() vFpppp -#() vFpppV #() cFpiii #() iFEiip #() iFEiiN @@ -821,7 +818,6 @@ #() pFpipi #() pFpipd #() pFpipp -#() pFpipV #() pFpCWp #() pFpCuW #() pFpCuu @@ -855,12 +851,15 @@ #() pFSppi #() vFEiipV #() vFEippp +#() vFEpipV +#() vFEpipA #() vFEpuup #() vFEpuuV #() vFEpupp #() vFEpupA #() vFEpLLp #() vFEppip +#() vFEppiV #() vFEppup #() vFEpppp #() vFiiiii @@ -938,7 +937,6 @@ #() vFpipiu #() vFpuiip #() vFpuipp -#() vFpuipV #() vFpuuuu #() vFpuddd #() vFpffff @@ -1083,6 +1081,8 @@ #() pFEpiii #() pFEpipL #() pFEpipp +#() pFEpipV +#() pFEpipA #() pFEpupp #() pFEppii #() pFEppip @@ -1137,6 +1137,7 @@ #() vFEpuipp #() vFEpLLpp #() vFEppipV +#() vFEppipA #() vFEppupp #() vFEppppp #() vFiiiiii @@ -2015,6 +2016,10 @@ wrappedgio2: - g_simple_async_result_new_take_error - vFpippp: - g_async_initable_init_async +- vFppipV: + - g_simple_async_result_set_error +- vFppipA: + - g_simple_async_result_set_error_va - vFpipppp: - g_dbus_connection_new_for_address - vFiippppV: @@ -2099,9 +2104,11 @@ wrappedglib2: - g_build_filename - g_markup_printf_escaped - g_strdup_printf + - g_strjoin - g_variant_new - pFpA: - g_markup_vprintf_escaped + - g_strjoinv - g_variant_new_parsed_va - vFppp: - g_array_sort_with_data @@ -2110,7 +2117,12 @@ wrappedglib2: - g_ptr_array_sort_with_data - g_static_private_set - vFppV: + - g_string_append_printf + - g_string_printf - g_variant_get +- vFppA: + - g_string_append_vprintf + - g_string_vprintf - iFppp: - g_vasprintf - g_vfprintf @@ -2138,6 +2150,10 @@ wrappedglib2: - g_variant_new_va - pFppV: - g_build_path +- vFpipV: + - g_log +- vFpipA: + - g_logv - vFpupp: - g_datalist_id_set_data_full - vFpppp: @@ -2151,6 +2167,10 @@ wrappedglib2: - uFpipp: - g_io_add_watch - g_log_set_handler +- pFpipV: + - g_error_new +- pFpipA: + - g_error_new_valist - pFpupp: - g_datalist_id_dup_data - pFppip: @@ -2264,6 +2284,9 @@ wrappedgtkx112: - iFpp: - gtk_init_check - gtk_type_unique +- pFiV: + - gtk_list_store_new + - gtk_tree_store_new - pFpi: - gtk_type_check_object_cast - vFppp: @@ -2284,6 +2307,8 @@ wrappedgtkx112: - gtk_widget_style_get_valist - uFupp: - gtk_timeout_add +- vFppiV: + - gtk_list_store_insert_with_values - vFppup: - gtk_action_group_add_actions - vFpppp: diff --git a/src/wrapped/generated/wrappedgio2types.h b/src/wrapped/generated/wrappedgio2types.h index ae5562f6..54be1037 100644 --- a/src/wrapped/generated/wrappedgio2types.h +++ b/src/wrapped/generated/wrappedgio2types.h @@ -19,6 +19,8 @@ typedef uint64_t (*uFpppp_t)(void*, void*, void*, void*); typedef uintptr_t (*LFpppp_t)(void*, void*, void*, void*); typedef void* (*pFpppp_t)(void*, void*, void*, void*); typedef void (*vFpippp_t)(void*, int64_t, void*, void*, void*); +typedef void (*vFppipV_t)(void*, void*, int64_t, void*, ...); +typedef void (*vFppipA_t)(void*, void*, int64_t, void*, va_list); typedef void (*vFpipppp_t)(void*, int64_t, void*, void*, void*, void*); typedef void (*vFiippppV_t)(int64_t, int64_t, void*, void*, void*, void*, ...); typedef void (*vFiupippp_t)(int64_t, uint64_t, void*, int64_t, void*, void*, void*); @@ -53,6 +55,8 @@ typedef void (*vFpppppppiippp_t)(void*, void*, void*, void*, void*, void*, void* GO(g_simple_async_result_new_from_error, pFpppp_t) \ GO(g_simple_async_result_new_take_error, pFpppp_t) \ GO(g_async_initable_init_async, vFpippp_t) \ + GO(g_simple_async_result_set_error, vFppipV_t) \ + GO(g_simple_async_result_set_error_va, vFppipA_t) \ GO(g_dbus_connection_new_for_address, vFpipppp_t) \ GO(g_async_initable_new_async, vFiippppV_t) \ GO(g_async_initable_newv_async, vFiupippp_t) \ diff --git a/src/wrapped/generated/wrappedglib2types.h b/src/wrapped/generated/wrappedglib2types.h index 8ed095bc..ba82b40d 100644 --- a/src/wrapped/generated/wrappedglib2types.h +++ b/src/wrapped/generated/wrappedglib2types.h @@ -25,6 +25,7 @@ typedef void* (*pFpV_t)(void*, ...); typedef void* (*pFpA_t)(void*, va_list); typedef void (*vFppp_t)(void*, void*, void*); typedef void (*vFppV_t)(void*, void*, ...); +typedef void (*vFppA_t)(void*, void*, va_list); typedef int64_t (*iFppp_t)(void*, void*, void*); typedef int64_t (*iFppV_t)(void*, void*, ...); typedef uint64_t (*uFipp_t)(int64_t, void*, void*); @@ -32,12 +33,16 @@ typedef uint64_t (*uFupp_t)(uint64_t, void*, void*); typedef uint64_t (*uFppp_t)(void*, void*, void*); typedef void* (*pFppp_t)(void*, void*, void*); typedef void* (*pFppV_t)(void*, void*, ...); +typedef void (*vFpipV_t)(void*, int64_t, void*, ...); +typedef void (*vFpipA_t)(void*, int64_t, void*, va_list); typedef void (*vFpupp_t)(void*, uint64_t, void*, void*); typedef void (*vFpppp_t)(void*, void*, void*, void*); typedef int64_t (*iFpLpp_t)(void*, uintptr_t, void*, void*); typedef int64_t (*iFpLpV_t)(void*, uintptr_t, void*, ...); typedef uint64_t (*uFippp_t)(int64_t, void*, void*, void*); typedef uint64_t (*uFpipp_t)(void*, int64_t, void*, void*); +typedef void* (*pFpipV_t)(void*, int64_t, void*, ...); +typedef void* (*pFpipA_t)(void*, int64_t, void*, va_list); typedef void* (*pFpupp_t)(void*, uint64_t, void*, void*); typedef void* (*pFppip_t)(void*, void*, int64_t, void*); typedef void* (*pFpppp_t)(void*, void*, void*, void*); @@ -87,15 +92,21 @@ typedef int64_t (*iFpppippppppp_t)(void*, void*, void*, int64_t, void*, void*, v GO(g_build_filename, pFpV_t) \ GO(g_markup_printf_escaped, pFpV_t) \ GO(g_strdup_printf, pFpV_t) \ + GO(g_strjoin, pFpV_t) \ GO(g_variant_new, pFpV_t) \ GO(g_markup_vprintf_escaped, pFpA_t) \ + GO(g_strjoinv, pFpA_t) \ GO(g_variant_new_parsed_va, pFpA_t) \ GO(g_array_sort_with_data, vFppp_t) \ GO(g_hash_table_foreach, 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) \ + GO(g_string_append_printf, vFppV_t) \ + GO(g_string_printf, vFppV_t) \ GO(g_variant_get, vFppV_t) \ + GO(g_string_append_vprintf, vFppA_t) \ + GO(g_string_vprintf, vFppA_t) \ GO(g_vasprintf, iFppp_t) \ GO(g_vfprintf, iFppp_t) \ GO(g_vsprintf, iFppp_t) \ @@ -116,6 +127,8 @@ typedef int64_t (*iFpppippppppp_t)(void*, void*, void*, int64_t, void*, void*, v GO(g_slist_sort_with_data, pFppp_t) \ GO(g_variant_new_va, pFppp_t) \ GO(g_build_path, pFppV_t) \ + GO(g_log, vFpipV_t) \ + GO(g_logv, vFpipA_t) \ GO(g_datalist_id_set_data_full, vFpupp_t) \ GO(g_source_set_callback, vFpppp_t) \ GO(g_vsnprintf, iFpLpp_t) \ @@ -123,6 +136,8 @@ typedef int64_t (*iFpppippppppp_t)(void*, void*, void*, int64_t, void*, void*, v GO(g_idle_add_full, uFippp_t) \ GO(g_io_add_watch, uFpipp_t) \ GO(g_log_set_handler, uFpipp_t) \ + GO(g_error_new, pFpipV_t) \ + GO(g_error_new_valist, pFpipA_t) \ GO(g_datalist_id_dup_data, pFpupp_t) \ GO(g_thread_create, pFppip_t) \ GO(g_hash_table_new_full, pFpppp_t) \ diff --git a/src/wrapped/generated/wrappedgtkx112types.h b/src/wrapped/generated/wrappedgtkx112types.h index 03911427..eca206ce 100644 --- a/src/wrapped/generated/wrappedgtkx112types.h +++ b/src/wrapped/generated/wrappedgtkx112types.h @@ -15,11 +15,13 @@ typedef float (*fFp_t)(void*); typedef void* (*pFi_t)(int64_t); typedef void (*vFpp_t)(void*, void*); typedef int64_t (*iFpp_t)(void*, void*); +typedef void* (*pFiV_t)(int64_t, ...); typedef void* (*pFpi_t)(void*, int64_t); typedef void (*vFppp_t)(void*, void*, void*); typedef void (*vFppV_t)(void*, void*, ...); typedef void (*vFppA_t)(void*, void*, va_list); typedef uint64_t (*uFupp_t)(uint64_t, void*, void*); +typedef void (*vFppiV_t)(void*, void*, int64_t, ...); typedef void (*vFppup_t)(void*, void*, uint64_t, void*); typedef void (*vFpppp_t)(void*, void*, void*, void*); typedef int64_t (*iFpppp_t)(void*, void*, void*, void*); @@ -46,6 +48,8 @@ typedef void* (*pFpipppppppi_t)(void*, int64_t, void*, void*, void*, void*, void GO(gtk_init, vFpp_t) \ GO(gtk_init_check, iFpp_t) \ GO(gtk_type_unique, iFpp_t) \ + GO(gtk_list_store_new, pFiV_t) \ + GO(gtk_tree_store_new, pFiV_t) \ GO(gtk_type_check_object_cast, pFpi_t) \ GO(gtk_builder_connect_signals_full, vFppp_t) \ GO(gtk_clipboard_request_text, vFppp_t) \ @@ -61,6 +65,7 @@ typedef void* (*pFpipppppppi_t)(void*, int64_t, void*, void*, void*, void*, void GO(gtk_list_store_set_valist, vFppA_t) \ GO(gtk_widget_style_get_valist, vFppA_t) \ GO(gtk_timeout_add, uFupp_t) \ + GO(gtk_list_store_insert_with_values, vFppiV_t) \ GO(gtk_action_group_add_actions, vFppup_t) \ GO(gtk_clipboard_request_contents, vFpppp_t) \ GO(gtk_object_set_data_full, vFpppp_t) \ diff --git a/src/wrapped/generated/wrapper.c b/src/wrapped/generated/wrapper.c index 9ef6a2b4..1886745a 100644 --- a/src/wrapped/generated/wrapper.c +++ b/src/wrapped/generated/wrapper.c @@ -257,12 +257,10 @@ typedef void* (*pFEp_t)(x64emu_t*, void*); typedef void* (*pFii_t)(int64_t, int64_t); typedef void* (*pFiu_t)(int64_t, uint64_t); typedef void* (*pFip_t)(int64_t, void*); -typedef void* (*pFiV_t)(int64_t, void*); typedef void* (*pFui_t)(uint64_t, int64_t); typedef void* (*pFuC_t)(uint64_t, uint8_t); typedef void* (*pFuu_t)(uint64_t, uint64_t); typedef void* (*pFup_t)(uint64_t, void*); -typedef void* (*pFuV_t)(uint64_t, void*); typedef void* (*pFUi_t)(uint64_t, int64_t); typedef void* (*pFdd_t)(double, double); typedef void* (*pFlp_t)(intptr_t, void*); @@ -347,7 +345,6 @@ typedef void (*vFppd_t)(void*, void*, double); typedef void (*vFppl_t)(void*, void*, intptr_t); typedef void (*vFppL_t)(void*, void*, uintptr_t); typedef void (*vFppp_t)(void*, void*, void*); -typedef void (*vFppV_t)(void*, void*, void*); typedef int64_t (*iFEiw_t)(x64emu_t*, int64_t, int16_t); typedef int64_t (*iFEip_t)(x64emu_t*, int64_t, void*); typedef int64_t (*iFEWW_t)(x64emu_t*, uint16_t, uint16_t); @@ -489,6 +486,7 @@ typedef uintptr_t (*LFppi_t)(void*, void*, int64_t); typedef uintptr_t (*LFppL_t)(void*, void*, uintptr_t); typedef uintptr_t (*LFSpL_t)(void*, void*, uintptr_t); typedef void* (*pFEip_t)(x64emu_t*, int64_t, void*); +typedef void* (*pFEiV_t)(x64emu_t*, int64_t, void*); typedef void* (*pFEup_t)(x64emu_t*, uint64_t, void*); typedef void* (*pFEpi_t)(x64emu_t*, void*, int64_t); typedef void* (*pFEpu_t)(x64emu_t*, void*, uint64_t); @@ -655,7 +653,6 @@ typedef void (*vFpppU_t)(void*, void*, void*, uint64_t); typedef void (*vFpppd_t)(void*, void*, void*, double); typedef void (*vFpppL_t)(void*, void*, void*, uintptr_t); typedef void (*vFpppp_t)(void*, void*, void*, void*); -typedef void (*vFpppV_t)(void*, void*, void*, void*); typedef int8_t (*cFpiii_t)(void*, int64_t, int64_t, int64_t); typedef int64_t (*iFEiip_t)(x64emu_t*, int64_t, int64_t, void*); typedef int64_t (*iFEiiN_t)(x64emu_t*, int64_t, int64_t, ...); @@ -855,7 +852,6 @@ typedef void* (*pFpiLL_t)(void*, int64_t, uintptr_t, uintptr_t); typedef void* (*pFpipi_t)(void*, int64_t, void*, int64_t); typedef void* (*pFpipd_t)(void*, int64_t, void*, double); typedef void* (*pFpipp_t)(void*, int64_t, void*, void*); -typedef void* (*pFpipV_t)(void*, int64_t, void*, void*); typedef void* (*pFpCWp_t)(void*, uint8_t, uint16_t, void*); typedef void* (*pFpCuW_t)(void*, uint8_t, uint64_t, uint16_t); typedef void* (*pFpCuu_t)(void*, uint8_t, uint64_t, uint64_t); @@ -889,12 +885,15 @@ typedef void* (*pFpppp_t)(void*, void*, void*, void*); typedef void* (*pFSppi_t)(void*, void*, void*, int64_t); typedef void (*vFEiipV_t)(x64emu_t*, int64_t, int64_t, void*, void*); typedef void (*vFEippp_t)(x64emu_t*, int64_t, void*, void*, void*); +typedef void (*vFEpipV_t)(x64emu_t*, void*, int64_t, void*, void*); +typedef void (*vFEpipA_t)(x64emu_t*, void*, int64_t, void*, void*); typedef void (*vFEpuup_t)(x64emu_t*, void*, uint64_t, uint64_t, void*); typedef void (*vFEpuuV_t)(x64emu_t*, void*, uint64_t, uint64_t, void*); typedef void (*vFEpupp_t)(x64emu_t*, void*, uint64_t, void*, void*); typedef void (*vFEpupA_t)(x64emu_t*, void*, uint64_t, void*, void*); typedef void (*vFEpLLp_t)(x64emu_t*, void*, uintptr_t, uintptr_t, void*); typedef void (*vFEppip_t)(x64emu_t*, void*, void*, int64_t, void*); +typedef void (*vFEppiV_t)(x64emu_t*, void*, void*, int64_t, void*); typedef void (*vFEppup_t)(x64emu_t*, void*, void*, uint64_t, void*); typedef void (*vFEpppp_t)(x64emu_t*, void*, void*, void*, void*); typedef void (*vFiiiii_t)(int64_t, int64_t, int64_t, int64_t, int64_t); @@ -972,7 +971,6 @@ typedef void (*vFpipii_t)(void*, int64_t, void*, int64_t, int64_t); typedef void (*vFpipiu_t)(void*, int64_t, void*, int64_t, uint64_t); typedef void (*vFpuiip_t)(void*, uint64_t, int64_t, int64_t, void*); typedef void (*vFpuipp_t)(void*, uint64_t, int64_t, void*, void*); -typedef void (*vFpuipV_t)(void*, uint64_t, int64_t, void*, void*); typedef void (*vFpuuuu_t)(void*, uint64_t, uint64_t, uint64_t, uint64_t); typedef void (*vFpuddd_t)(void*, uint64_t, double, double, double); typedef void (*vFpffff_t)(void*, float, float, float, float); @@ -1117,6 +1115,8 @@ typedef uintptr_t (*LFppppp_t)(void*, void*, void*, void*, void*); typedef void* (*pFEpiii_t)(x64emu_t*, void*, int64_t, int64_t, int64_t); typedef void* (*pFEpipL_t)(x64emu_t*, void*, int64_t, void*, uintptr_t); typedef void* (*pFEpipp_t)(x64emu_t*, void*, int64_t, void*, void*); +typedef void* (*pFEpipV_t)(x64emu_t*, void*, int64_t, void*, void*); +typedef void* (*pFEpipA_t)(x64emu_t*, void*, int64_t, void*, void*); typedef void* (*pFEpupp_t)(x64emu_t*, void*, uint64_t, void*, void*); typedef void* (*pFEppii_t)(x64emu_t*, void*, void*, int64_t, int64_t); typedef void* (*pFEppip_t)(x64emu_t*, void*, void*, int64_t, void*); @@ -1171,6 +1171,7 @@ typedef void (*vFEpippp_t)(x64emu_t*, void*, int64_t, void*, void*, void*); typedef void (*vFEpuipp_t)(x64emu_t*, void*, uint64_t, int64_t, void*, void*); typedef void (*vFEpLLpp_t)(x64emu_t*, void*, uintptr_t, uintptr_t, void*, void*); typedef void (*vFEppipV_t)(x64emu_t*, void*, void*, int64_t, void*, void*); +typedef void (*vFEppipA_t)(x64emu_t*, void*, void*, int64_t, void*, void*); typedef void (*vFEppupp_t)(x64emu_t*, void*, void*, uint64_t, void*, void*); typedef void (*vFEppppp_t)(x64emu_t*, void*, void*, void*, void*, void*); typedef void (*vFiiiiii_t)(int64_t, int64_t, int64_t, int64_t, int64_t, int64_t); @@ -2135,12 +2136,10 @@ void pFEp(x64emu_t *emu, uintptr_t fcn) { pFEp_t fn = (pFEp_t)fcn; R_RAX=(uintpt void pFii(x64emu_t *emu, uintptr_t fcn) { pFii_t fn = (pFii_t)fcn; R_RAX=(uintptr_t)fn((int64_t)R_RDI, (int64_t)R_RSI); } void pFiu(x64emu_t *emu, uintptr_t fcn) { pFiu_t fn = (pFiu_t)fcn; R_RAX=(uintptr_t)fn((int64_t)R_RDI, (uint64_t)R_RSI); } void pFip(x64emu_t *emu, uintptr_t fcn) { pFip_t fn = (pFip_t)fcn; R_RAX=(uintptr_t)fn((int64_t)R_RDI, (void*)R_RSI); } -void pFiV(x64emu_t *emu, uintptr_t fcn) { pFiV_t fn = (pFiV_t)fcn; R_RAX=(uintptr_t)fn((int64_t)R_RDI, (void*)(R_RSP + 8)); } void pFui(x64emu_t *emu, uintptr_t fcn) { pFui_t fn = (pFui_t)fcn; R_RAX=(uintptr_t)fn((uint64_t)R_RDI, (int64_t)R_RSI); } void pFuC(x64emu_t *emu, uintptr_t fcn) { pFuC_t fn = (pFuC_t)fcn; R_RAX=(uintptr_t)fn((uint64_t)R_RDI, (uint8_t)R_RSI); } void pFuu(x64emu_t *emu, uintptr_t fcn) { pFuu_t fn = (pFuu_t)fcn; R_RAX=(uintptr_t)fn((uint64_t)R_RDI, (uint64_t)R_RSI); } void pFup(x64emu_t *emu, uintptr_t fcn) { pFup_t fn = (pFup_t)fcn; R_RAX=(uintptr_t)fn((uint64_t)R_RDI, (void*)R_RSI); } -void pFuV(x64emu_t *emu, uintptr_t fcn) { pFuV_t fn = (pFuV_t)fcn; R_RAX=(uintptr_t)fn((uint64_t)R_RDI, (void*)(R_RSP + 8)); } void pFUi(x64emu_t *emu, uintptr_t fcn) { pFUi_t fn = (pFUi_t)fcn; R_RAX=(uintptr_t)fn((uint64_t)R_RDI, (int64_t)R_RSI); } void pFdd(x64emu_t *emu, uintptr_t fcn) { pFdd_t fn = (pFdd_t)fcn; R_RAX=(uintptr_t)fn(emu->xmm[0].d[0], emu->xmm[1].d[0]); } void pFlp(x64emu_t *emu, uintptr_t fcn) { pFlp_t fn = (pFlp_t)fcn; R_RAX=(uintptr_t)fn((intptr_t)R_RDI, (void*)R_RSI); } @@ -2225,7 +2224,6 @@ void vFppd(x64emu_t *emu, uintptr_t fcn) { vFppd_t fn = (vFppd_t)fcn; fn((void*) void vFppl(x64emu_t *emu, uintptr_t fcn) { vFppl_t fn = (vFppl_t)fcn; fn((void*)R_RDI, (void*)R_RSI, (intptr_t)R_RDX); } void vFppL(x64emu_t *emu, uintptr_t fcn) { vFppL_t fn = (vFppL_t)fcn; fn((void*)R_RDI, (void*)R_RSI, (uintptr_t)R_RDX); } void vFppp(x64emu_t *emu, uintptr_t fcn) { vFppp_t fn = (vFppp_t)fcn; fn((void*)R_RDI, (void*)R_RSI, (void*)R_RDX); } -void vFppV(x64emu_t *emu, uintptr_t fcn) { vFppV_t fn = (vFppV_t)fcn; fn((void*)R_RDI, (void*)R_RSI, (void*)(R_RSP + 8)); } void iFEiw(x64emu_t *emu, uintptr_t fcn) { iFEiw_t fn = (iFEiw_t)fcn; R_RAX=(int64_t)fn(emu, (int64_t)R_RDI, (int16_t)R_RSI); } void iFEip(x64emu_t *emu, uintptr_t fcn) { iFEip_t fn = (iFEip_t)fcn; R_RAX=(int64_t)fn(emu, (int64_t)R_RDI, (void*)R_RSI); } void iFEWW(x64emu_t *emu, uintptr_t fcn) { iFEWW_t fn = (iFEWW_t)fcn; R_RAX=(int64_t)fn(emu, (uint16_t)R_RDI, (uint16_t)R_RSI); } @@ -2367,6 +2365,7 @@ void LFppi(x64emu_t *emu, uintptr_t fcn) { LFppi_t fn = (LFppi_t)fcn; R_RAX=(uin void LFppL(x64emu_t *emu, uintptr_t fcn) { LFppL_t fn = (LFppL_t)fcn; R_RAX=(uintptr_t)fn((void*)R_RDI, (void*)R_RSI, (uintptr_t)R_RDX); } void LFSpL(x64emu_t *emu, uintptr_t fcn) { LFSpL_t fn = (LFSpL_t)fcn; R_RAX=(uintptr_t)fn(io_convert((void*)R_RDI), (void*)R_RSI, (uintptr_t)R_RDX); } void pFEip(x64emu_t *emu, uintptr_t fcn) { pFEip_t fn = (pFEip_t)fcn; R_RAX=(uintptr_t)fn(emu, (int64_t)R_RDI, (void*)R_RSI); } +void pFEiV(x64emu_t *emu, uintptr_t fcn) { pFEiV_t fn = (pFEiV_t)fcn; R_RAX=(uintptr_t)fn(emu, (int64_t)R_RDI, (void*)(R_RSP + 8)); } void pFEup(x64emu_t *emu, uintptr_t fcn) { pFEup_t fn = (pFEup_t)fcn; R_RAX=(uintptr_t)fn(emu, (uint64_t)R_RDI, (void*)R_RSI); } void pFEpi(x64emu_t *emu, uintptr_t fcn) { pFEpi_t fn = (pFEpi_t)fcn; R_RAX=(uintptr_t)fn(emu, (void*)R_RDI, (int64_t)R_RSI); } void pFEpu(x64emu_t *emu, uintptr_t fcn) { pFEpu_t fn = (pFEpu_t)fcn; R_RAX=(uintptr_t)fn(emu, (void*)R_RDI, (uint64_t)R_RSI); } @@ -2533,7 +2532,6 @@ void vFpppU(x64emu_t *emu, uintptr_t fcn) { vFpppU_t fn = (vFpppU_t)fcn; fn((voi void vFpppd(x64emu_t *emu, uintptr_t fcn) { vFpppd_t fn = (vFpppd_t)fcn; fn((void*)R_RDI, (void*)R_RSI, (void*)R_RDX, emu->xmm[0].d[0]); } void vFpppL(x64emu_t *emu, uintptr_t fcn) { vFpppL_t fn = (vFpppL_t)fcn; fn((void*)R_RDI, (void*)R_RSI, (void*)R_RDX, (uintptr_t)R_RCX); } void vFpppp(x64emu_t *emu, uintptr_t fcn) { vFpppp_t fn = (vFpppp_t)fcn; fn((void*)R_RDI, (void*)R_RSI, (void*)R_RDX, (void*)R_RCX); } -void vFpppV(x64emu_t *emu, uintptr_t fcn) { vFpppV_t fn = (vFpppV_t)fcn; fn((void*)R_RDI, (void*)R_RSI, (void*)R_RDX, (void*)(R_RSP + 8)); } void cFpiii(x64emu_t *emu, uintptr_t fcn) { cFpiii_t fn = (cFpiii_t)fcn; R_RAX=fn((void*)R_RDI, (int64_t)R_RSI, (int64_t)R_RDX, (int64_t)R_RCX); } void iFEiip(x64emu_t *emu, uintptr_t fcn) { iFEiip_t fn = (iFEiip_t)fcn; R_RAX=(int64_t)fn(emu, (int64_t)R_RDI, (int64_t)R_RSI, (void*)R_RDX); } void iFEiiN(x64emu_t *emu, uintptr_t fcn) { iFEiiN_t fn = (iFEiiN_t)fcn; R_RAX=(int64_t)fn(emu, (int64_t)R_RDI, (int64_t)R_RSI, (void*)R_RDX); } @@ -2733,7 +2731,6 @@ void pFpiLL(x64emu_t *emu, uintptr_t fcn) { pFpiLL_t fn = (pFpiLL_t)fcn; R_RAX=( void pFpipi(x64emu_t *emu, uintptr_t fcn) { pFpipi_t fn = (pFpipi_t)fcn; R_RAX=(uintptr_t)fn((void*)R_RDI, (int64_t)R_RSI, (void*)R_RDX, (int64_t)R_RCX); } void pFpipd(x64emu_t *emu, uintptr_t fcn) { pFpipd_t fn = (pFpipd_t)fcn; R_RAX=(uintptr_t)fn((void*)R_RDI, (int64_t)R_RSI, (void*)R_RDX, emu->xmm[0].d[0]); } void pFpipp(x64emu_t *emu, uintptr_t fcn) { pFpipp_t fn = (pFpipp_t)fcn; R_RAX=(uintptr_t)fn((void*)R_RDI, (int64_t)R_RSI, (void*)R_RDX, (void*)R_RCX); } -void pFpipV(x64emu_t *emu, uintptr_t fcn) { pFpipV_t fn = (pFpipV_t)fcn; R_RAX=(uintptr_t)fn((void*)R_RDI, (int64_t)R_RSI, (void*)R_RDX, (void*)(R_RSP + 8)); } void pFpCWp(x64emu_t *emu, uintptr_t fcn) { pFpCWp_t fn = (pFpCWp_t)fcn; R_RAX=(uintptr_t)fn((void*)R_RDI, (uint8_t)R_RSI, (uint16_t)R_RDX, (void*)R_RCX); } void pFpCuW(x64emu_t *emu, uintptr_t fcn) { pFpCuW_t fn = (pFpCuW_t)fcn; R_RAX=(uintptr_t)fn((void*)R_RDI, (uint8_t)R_RSI, (uint64_t)R_RDX, (uint16_t)R_RCX); } void pFpCuu(x64emu_t *emu, uintptr_t fcn) { pFpCuu_t fn = (pFpCuu_t)fcn; R_RAX=(uintptr_t)fn((void*)R_RDI, (uint8_t)R_RSI, (uint64_t)R_RDX, (uint64_t)R_RCX); } @@ -2767,12 +2764,15 @@ void pFpppp(x64emu_t *emu, uintptr_t fcn) { pFpppp_t fn = (pFpppp_t)fcn; R_RAX=( void pFSppi(x64emu_t *emu, uintptr_t fcn) { pFSppi_t fn = (pFSppi_t)fcn; R_RAX=(uintptr_t)fn(io_convert((void*)R_RDI), (void*)R_RSI, (void*)R_RDX, (int64_t)R_RCX); } void vFEiipV(x64emu_t *emu, uintptr_t fcn) { vFEiipV_t fn = (vFEiipV_t)fcn; fn(emu, (int64_t)R_RDI, (int64_t)R_RSI, (void*)R_RDX, (void*)(R_RSP + 8)); } void vFEippp(x64emu_t *emu, uintptr_t fcn) { vFEippp_t fn = (vFEippp_t)fcn; fn(emu, (int64_t)R_RDI, (void*)R_RSI, (void*)R_RDX, (void*)R_RCX); } +void vFEpipV(x64emu_t *emu, uintptr_t fcn) { vFEpipV_t fn = (vFEpipV_t)fcn; fn(emu, (void*)R_RDI, (int64_t)R_RSI, (void*)R_RDX, (void*)(R_RSP + 8)); } +void vFEpipA(x64emu_t *emu, uintptr_t fcn) { vFEpipA_t fn = (vFEpipA_t)fcn; fn(emu, (void*)R_RDI, (int64_t)R_RSI, (void*)R_RDX, (void*)R_RCX); } void vFEpuup(x64emu_t *emu, uintptr_t fcn) { vFEpuup_t fn = (vFEpuup_t)fcn; fn(emu, (void*)R_RDI, (uint64_t)R_RSI, (uint64_t)R_RDX, (void*)R_RCX); } void vFEpuuV(x64emu_t *emu, uintptr_t fcn) { vFEpuuV_t fn = (vFEpuuV_t)fcn; fn(emu, (void*)R_RDI, (uint64_t)R_RSI, (uint64_t)R_RDX, (void*)(R_RSP + 8)); } void vFEpupp(x64emu_t *emu, uintptr_t fcn) { vFEpupp_t fn = (vFEpupp_t)fcn; fn(emu, (void*)R_RDI, (uint64_t)R_RSI, (void*)R_RDX, (void*)R_RCX); } void vFEpupA(x64emu_t *emu, uintptr_t fcn) { vFEpupA_t fn = (vFEpupA_t)fcn; fn(emu, (void*)R_RDI, (uint64_t)R_RSI, (void*)R_RDX, (void*)R_RCX); } void vFEpLLp(x64emu_t *emu, uintptr_t fcn) { vFEpLLp_t fn = (vFEpLLp_t)fcn; fn(emu, (void*)R_RDI, (uintptr_t)R_RSI, (uintptr_t)R_RDX, (void*)R_RCX); } void vFEppip(x64emu_t *emu, uintptr_t fcn) { vFEppip_t fn = (vFEppip_t)fcn; fn(emu, (void*)R_RDI, (void*)R_RSI, (int64_t)R_RDX, (void*)R_RCX); } +void vFEppiV(x64emu_t *emu, uintptr_t fcn) { vFEppiV_t fn = (vFEppiV_t)fcn; fn(emu, (void*)R_RDI, (void*)R_RSI, (int64_t)R_RDX, (void*)(R_RSP + 8)); } void vFEppup(x64emu_t *emu, uintptr_t fcn) { vFEppup_t fn = (vFEppup_t)fcn; fn(emu, (void*)R_RDI, (void*)R_RSI, (uint64_t)R_RDX, (void*)R_RCX); } void vFEpppp(x64emu_t *emu, uintptr_t fcn) { vFEpppp_t fn = (vFEpppp_t)fcn; fn(emu, (void*)R_RDI, (void*)R_RSI, (void*)R_RDX, (void*)R_RCX); } void vFiiiii(x64emu_t *emu, uintptr_t fcn) { vFiiiii_t fn = (vFiiiii_t)fcn; fn((int64_t)R_RDI, (int64_t)R_RSI, (int64_t)R_RDX, (int64_t)R_RCX, (int64_t)R_R8); } @@ -2850,7 +2850,6 @@ void vFpipii(x64emu_t *emu, uintptr_t fcn) { vFpipii_t fn = (vFpipii_t)fcn; fn(( void vFpipiu(x64emu_t *emu, uintptr_t fcn) { vFpipiu_t fn = (vFpipiu_t)fcn; fn((void*)R_RDI, (int64_t)R_RSI, (void*)R_RDX, (int64_t)R_RCX, (uint64_t)R_R8); } void vFpuiip(x64emu_t *emu, uintptr_t fcn) { vFpuiip_t fn = (vFpuiip_t)fcn; fn((void*)R_RDI, (uint64_t)R_RSI, (int64_t)R_RDX, (int64_t)R_RCX, (void*)R_R8); } void vFpuipp(x64emu_t *emu, uintptr_t fcn) { vFpuipp_t fn = (vFpuipp_t)fcn; fn((void*)R_RDI, (uint64_t)R_RSI, (int64_t)R_RDX, (void*)R_RCX, (void*)R_R8); } -void vFpuipV(x64emu_t *emu, uintptr_t fcn) { vFpuipV_t fn = (vFpuipV_t)fcn; fn((void*)R_RDI, (uint64_t)R_RSI, (int64_t)R_RDX, (void*)R_RCX, (void*)(R_RSP + 8)); } void vFpuuuu(x64emu_t *emu, uintptr_t fcn) { vFpuuuu_t fn = (vFpuuuu_t)fcn; fn((void*)R_RDI, (uint64_t)R_RSI, (uint64_t)R_RDX, (uint64_t)R_RCX, (uint64_t)R_R8); } void vFpuddd(x64emu_t *emu, uintptr_t fcn) { vFpuddd_t fn = (vFpuddd_t)fcn; fn((void*)R_RDI, (uint64_t)R_RSI, emu->xmm[0].d[0], emu->xmm[1].d[0], emu->xmm[2].d[0]); } void vFpffff(x64emu_t *emu, uintptr_t fcn) { vFpffff_t fn = (vFpffff_t)fcn; fn((void*)R_RDI, emu->xmm[0].f[0], emu->xmm[1].f[0], emu->xmm[2].f[0], emu->xmm[3].f[0]); } @@ -2995,6 +2994,8 @@ void LFppppp(x64emu_t *emu, uintptr_t fcn) { LFppppp_t fn = (LFppppp_t)fcn; R_RA void pFEpiii(x64emu_t *emu, uintptr_t fcn) { pFEpiii_t fn = (pFEpiii_t)fcn; R_RAX=(uintptr_t)fn(emu, (void*)R_RDI, (int64_t)R_RSI, (int64_t)R_RDX, (int64_t)R_RCX); } void pFEpipL(x64emu_t *emu, uintptr_t fcn) { pFEpipL_t fn = (pFEpipL_t)fcn; R_RAX=(uintptr_t)fn(emu, (void*)R_RDI, (int64_t)R_RSI, (void*)R_RDX, (uintptr_t)R_RCX); } void pFEpipp(x64emu_t *emu, uintptr_t fcn) { pFEpipp_t fn = (pFEpipp_t)fcn; R_RAX=(uintptr_t)fn(emu, (void*)R_RDI, (int64_t)R_RSI, (void*)R_RDX, (void*)R_RCX); } +void pFEpipV(x64emu_t *emu, uintptr_t fcn) { pFEpipV_t fn = (pFEpipV_t)fcn; R_RAX=(uintptr_t)fn(emu, (void*)R_RDI, (int64_t)R_RSI, (void*)R_RDX, (void*)(R_RSP + 8)); } +void pFEpipA(x64emu_t *emu, uintptr_t fcn) { pFEpipA_t fn = (pFEpipA_t)fcn; R_RAX=(uintptr_t)fn(emu, (void*)R_RDI, (int64_t)R_RSI, (void*)R_RDX, (void*)R_RCX); } void pFEpupp(x64emu_t *emu, uintptr_t fcn) { pFEpupp_t fn = (pFEpupp_t)fcn; R_RAX=(uintptr_t)fn(emu, (void*)R_RDI, (uint64_t)R_RSI, (void*)R_RDX, (void*)R_RCX); } void pFEppii(x64emu_t *emu, uintptr_t fcn) { pFEppii_t fn = (pFEppii_t)fcn; R_RAX=(uintptr_t)fn(emu, (void*)R_RDI, (void*)R_RSI, (int64_t)R_RDX, (int64_t)R_RCX); } void pFEppip(x64emu_t *emu, uintptr_t fcn) { pFEppip_t fn = (pFEppip_t)fcn; R_RAX=(uintptr_t)fn(emu, (void*)R_RDI, (void*)R_RSI, (int64_t)R_RDX, (void*)R_RCX); } @@ -3049,6 +3050,7 @@ void vFEpippp(x64emu_t *emu, uintptr_t fcn) { vFEpippp_t fn = (vFEpippp_t)fcn; f void vFEpuipp(x64emu_t *emu, uintptr_t fcn) { vFEpuipp_t fn = (vFEpuipp_t)fcn; fn(emu, (void*)R_RDI, (uint64_t)R_RSI, (int64_t)R_RDX, (void*)R_RCX, (void*)R_R8); } void vFEpLLpp(x64emu_t *emu, uintptr_t fcn) { vFEpLLpp_t fn = (vFEpLLpp_t)fcn; fn(emu, (void*)R_RDI, (uintptr_t)R_RSI, (uintptr_t)R_RDX, (void*)R_RCX, (void*)R_R8); } void vFEppipV(x64emu_t *emu, uintptr_t fcn) { vFEppipV_t fn = (vFEppipV_t)fcn; fn(emu, (void*)R_RDI, (void*)R_RSI, (int64_t)R_RDX, (void*)R_RCX, (void*)(R_RSP + 8)); } +void vFEppipA(x64emu_t *emu, uintptr_t fcn) { vFEppipA_t fn = (vFEppipA_t)fcn; fn(emu, (void*)R_RDI, (void*)R_RSI, (int64_t)R_RDX, (void*)R_RCX, (void*)R_R8); } void vFEppupp(x64emu_t *emu, uintptr_t fcn) { vFEppupp_t fn = (vFEppupp_t)fcn; fn(emu, (void*)R_RDI, (void*)R_RSI, (uint64_t)R_RDX, (void*)R_RCX, (void*)R_R8); } void vFEppppp(x64emu_t *emu, uintptr_t fcn) { vFEppppp_t fn = (vFEppppp_t)fcn; fn(emu, (void*)R_RDI, (void*)R_RSI, (void*)R_RDX, (void*)R_RCX, (void*)R_R8); } void vFiiiiii(x64emu_t *emu, uintptr_t fcn) { vFiiiiii_t fn = (vFiiiiii_t)fcn; fn((int64_t)R_RDI, (int64_t)R_RSI, (int64_t)R_RDX, (int64_t)R_RCX, (int64_t)R_R8, (int64_t)R_R9); } diff --git a/src/wrapped/generated/wrapper.h b/src/wrapped/generated/wrapper.h index 5bcb3ed9..64df1c33 100644 --- a/src/wrapped/generated/wrapper.h +++ b/src/wrapped/generated/wrapper.h @@ -256,12 +256,10 @@ void pFEp(x64emu_t *emu, uintptr_t fnc); void pFii(x64emu_t *emu, uintptr_t fnc); void pFiu(x64emu_t *emu, uintptr_t fnc); void pFip(x64emu_t *emu, uintptr_t fnc); -void pFiV(x64emu_t *emu, uintptr_t fnc); void pFui(x64emu_t *emu, uintptr_t fnc); void pFuC(x64emu_t *emu, uintptr_t fnc); void pFuu(x64emu_t *emu, uintptr_t fnc); void pFup(x64emu_t *emu, uintptr_t fnc); -void pFuV(x64emu_t *emu, uintptr_t fnc); void pFUi(x64emu_t *emu, uintptr_t fnc); void pFdd(x64emu_t *emu, uintptr_t fnc); void pFlp(x64emu_t *emu, uintptr_t fnc); @@ -346,7 +344,6 @@ void vFppd(x64emu_t *emu, uintptr_t fnc); void vFppl(x64emu_t *emu, uintptr_t fnc); void vFppL(x64emu_t *emu, uintptr_t fnc); void vFppp(x64emu_t *emu, uintptr_t fnc); -void vFppV(x64emu_t *emu, uintptr_t fnc); void iFEiw(x64emu_t *emu, uintptr_t fnc); void iFEip(x64emu_t *emu, uintptr_t fnc); void iFEWW(x64emu_t *emu, uintptr_t fnc); @@ -488,6 +485,7 @@ void LFppi(x64emu_t *emu, uintptr_t fnc); void LFppL(x64emu_t *emu, uintptr_t fnc); void LFSpL(x64emu_t *emu, uintptr_t fnc); void pFEip(x64emu_t *emu, uintptr_t fnc); +void pFEiV(x64emu_t *emu, uintptr_t fnc); void pFEup(x64emu_t *emu, uintptr_t fnc); void pFEpi(x64emu_t *emu, uintptr_t fnc); void pFEpu(x64emu_t *emu, uintptr_t fnc); @@ -654,7 +652,6 @@ void vFpppU(x64emu_t *emu, uintptr_t fnc); void vFpppd(x64emu_t *emu, uintptr_t fnc); void vFpppL(x64emu_t *emu, uintptr_t fnc); void vFpppp(x64emu_t *emu, uintptr_t fnc); -void vFpppV(x64emu_t *emu, uintptr_t fnc); void cFpiii(x64emu_t *emu, uintptr_t fnc); void iFEiip(x64emu_t *emu, uintptr_t fnc); void iFEiiN(x64emu_t *emu, uintptr_t fnc); @@ -854,7 +851,6 @@ void pFpiLL(x64emu_t *emu, uintptr_t fnc); void pFpipi(x64emu_t *emu, uintptr_t fnc); void pFpipd(x64emu_t *emu, uintptr_t fnc); void pFpipp(x64emu_t *emu, uintptr_t fnc); -void pFpipV(x64emu_t *emu, uintptr_t fnc); void pFpCWp(x64emu_t *emu, uintptr_t fnc); void pFpCuW(x64emu_t *emu, uintptr_t fnc); void pFpCuu(x64emu_t *emu, uintptr_t fnc); @@ -888,12 +884,15 @@ void pFpppp(x64emu_t *emu, uintptr_t fnc); void pFSppi(x64emu_t *emu, uintptr_t fnc); void vFEiipV(x64emu_t *emu, uintptr_t fnc); void vFEippp(x64emu_t *emu, uintptr_t fnc); +void vFEpipV(x64emu_t *emu, uintptr_t fnc); +void vFEpipA(x64emu_t *emu, uintptr_t fnc); void vFEpuup(x64emu_t *emu, uintptr_t fnc); void vFEpuuV(x64emu_t *emu, uintptr_t fnc); void vFEpupp(x64emu_t *emu, uintptr_t fnc); void vFEpupA(x64emu_t *emu, uintptr_t fnc); void vFEpLLp(x64emu_t *emu, uintptr_t fnc); void vFEppip(x64emu_t *emu, uintptr_t fnc); +void vFEppiV(x64emu_t *emu, uintptr_t fnc); void vFEppup(x64emu_t *emu, uintptr_t fnc); void vFEpppp(x64emu_t *emu, uintptr_t fnc); void vFiiiii(x64emu_t *emu, uintptr_t fnc); @@ -971,7 +970,6 @@ void vFpipii(x64emu_t *emu, uintptr_t fnc); void vFpipiu(x64emu_t *emu, uintptr_t fnc); void vFpuiip(x64emu_t *emu, uintptr_t fnc); void vFpuipp(x64emu_t *emu, uintptr_t fnc); -void vFpuipV(x64emu_t *emu, uintptr_t fnc); void vFpuuuu(x64emu_t *emu, uintptr_t fnc); void vFpuddd(x64emu_t *emu, uintptr_t fnc); void vFpffff(x64emu_t *emu, uintptr_t fnc); @@ -1116,6 +1114,8 @@ void LFppppp(x64emu_t *emu, uintptr_t fnc); void pFEpiii(x64emu_t *emu, uintptr_t fnc); void pFEpipL(x64emu_t *emu, uintptr_t fnc); void pFEpipp(x64emu_t *emu, uintptr_t fnc); +void pFEpipV(x64emu_t *emu, uintptr_t fnc); +void pFEpipA(x64emu_t *emu, uintptr_t fnc); void pFEpupp(x64emu_t *emu, uintptr_t fnc); void pFEppii(x64emu_t *emu, uintptr_t fnc); void pFEppip(x64emu_t *emu, uintptr_t fnc); @@ -1170,6 +1170,7 @@ void vFEpippp(x64emu_t *emu, uintptr_t fnc); void vFEpuipp(x64emu_t *emu, uintptr_t fnc); void vFEpLLpp(x64emu_t *emu, uintptr_t fnc); void vFEppipV(x64emu_t *emu, uintptr_t fnc); +void vFEppipA(x64emu_t *emu, uintptr_t fnc); void vFEppupp(x64emu_t *emu, uintptr_t fnc); void vFEppppp(x64emu_t *emu, uintptr_t fnc); void vFiiiiii(x64emu_t *emu, uintptr_t fnc); diff --git a/src/wrapped/wrappedgio2.c b/src/wrapped/wrappedgio2.c index 08d7ce27..47571c0c 100755 --- a/src/wrapped/wrappedgio2.c +++ b/src/wrapped/wrappedgio2.c @@ -51,6 +51,7 @@ typedef void (*vFpippppppp_t) (void*, int, void*, void*, void*, void*, voi typedef void* (*pFLippppppp_t) (size_t, int, void*, void*, void*, void*, void*, void*, void*); typedef uint32_t(*uFppppppippp_t) (void*, void*, void*, void*, void*, void*, int, void*, void*, void*); typedef void (*vFpppppppiippp_t) (void*, void*, void*, void*, void*, void*, void*, int, int, void*, void*, void*); +typedef void (*vFppipA_t) (void*, void*, int, void*, va_list); #define SUPER() \ GO(g_dbus_proxy_new, vFpippppppp_t) \ @@ -84,7 +85,8 @@ typedef void (*vFpppppppiippp_t) (void*, void*, void*, void*, void*, void*, v GO(g_bus_watch_name, uFipipppp_t) \ GO(g_bus_watch_name_on_connection, uFppipppp_t) \ GO(g_bus_own_name, uFLpippppp_t) \ - GO(g_bus_own_name_on_connection, uFppipppp_t) + GO(g_bus_own_name_on_connection, uFppipppp_t) \ + GO(g_simple_async_result_set_error_va, vFppipA_t) \ typedef struct gio2_my_s { @@ -693,7 +695,7 @@ EXPORT uint32_t my_g_bus_watch_name(x64emu_t* emu, size_t type, void* name, int { library_t * lib = GetLibInternal(libname); gio2_my_t *my = (gio2_my_t*)lib->priv.w.p2; - // note that a mecanism with a new callback, cleaned with notify, is also possible here + return my->g_bus_watch_name(type, name, flags, findGBusNameAppearedCallbackFct(appeared), findGBusNameVanishedCallbackFct(vanished), data, findGDestroyNotifyFct(notify)); } @@ -701,7 +703,7 @@ EXPORT uint32_t my_g_bus_watch_name_on_connection(x64emu_t* emu, void* connectio { library_t * lib = GetLibInternal(libname); gio2_my_t *my = (gio2_my_t*)lib->priv.w.p2; - // note that a mecanism with a new callback, cleaned with notify, is also possible here + return my->g_bus_watch_name_on_connection(connection, name, flags, findGBusNameAppearedCallbackFct(appeared), findGBusNameVanishedCallbackFct(vanished), data, findGDestroyNotifyFct(notify)); } @@ -709,7 +711,7 @@ EXPORT uint32_t my_g_bus_own_name(x64emu_t* emu, size_t type, void* name, int fl { library_t * lib = GetLibInternal(libname); gio2_my_t *my = (gio2_my_t*)lib->priv.w.p2; - // note that a mecanism with a new callback, cleaned with notify, is also possible here + return my->g_bus_own_name(type, name, flags, findGBusAcquiredCallbackFct(bus_acquired), findGBusNameAcquiredCallbackFct(name_acquired), findGBusNameLostCallbackFct(name_lost), data, findGDestroyNotifyFct(notify)); } @@ -717,10 +719,29 @@ EXPORT uint32_t my_g_bus_own_name_on_connection(x64emu_t* emu, void* connection, { library_t * lib = GetLibInternal(libname); gio2_my_t *my = (gio2_my_t*)lib->priv.w.p2; - // note that a mecanism with a new callback, cleaned with notify, is also possible here + return my->g_bus_own_name_on_connection(connection, name, flags, findGBusNameAcquiredCallbackFct(name_acquired), findGBusNameLostCallbackFct(name_lost), data, findGDestroyNotifyFct(notify)); } +EXPORT void my_g_simple_async_result_set_error_va(x64emu_t* emu, void* simple, void* domain, int code, void* fmt, x64_va_list_t V) +{ + library_t * lib = GetLibInternal(libname); + gio2_my_t *my = (gio2_my_t*)lib->priv.w.p2; + + CONVERT_VALIST(V); + my->g_simple_async_result_set_error_va(simple, domain, code, fmt, VARARGS); +} + +EXPORT void my_g_simple_async_result_set_error(x64emu_t* emu, void* simple, void* domain, int code, void* fmt, uintptr_t* b) +{ + library_t * lib = GetLibInternal(libname); + gio2_my_t *my = (gio2_my_t*)lib->priv.w.p2; + + myStackAlign(emu, fmt, b, emu->scratch, R_EAX, 4); + PREPARE_VALIST; + my->g_simple_async_result_set_error_va(simple, domain, code, fmt, VARARGS); +} + #define PRE_INIT \ if(box64_nogtk) \ return -1; diff --git a/src/wrapped/wrappedgio2_private.h b/src/wrapped/wrappedgio2_private.h index 8f510825..ef5bff3e 100755 --- a/src/wrapped/wrappedgio2_private.h +++ b/src/wrapped/wrappedgio2_private.h @@ -1399,8 +1399,8 @@ GOM(g_simple_async_result_new_take_error, pFEpppp) GO(g_simple_async_result_propagate_error, iFpp) GOM(g_simple_async_result_run_in_thread, vFEppip) GO(g_simple_async_result_set_check_cancellable, vFpp) -GO2(g_simple_async_result_set_error, vFpuipV, g_simple_async_result_set_error_va) // should align? -GO(g_simple_async_result_set_error_va, vFpuipp) +GOM(g_simple_async_result_set_error, vFEppipV) +GOM(g_simple_async_result_set_error_va, vFEppipA) GO(g_simple_async_result_set_from_error, vFpp) GO(g_simple_async_result_set_handle_cancellation, vFpi) GO(g_simple_async_result_set_op_res_gboolean, vFpi) diff --git a/src/wrapped/wrappedglib2.c b/src/wrapped/wrappedglib2.c index e288c8f7..42b038da 100755 --- a/src/wrapped/wrappedglib2.c +++ b/src/wrapped/wrappedglib2.c @@ -65,12 +65,15 @@ typedef void* (*pFppLiiip_t)(void*, void*, unsigned long, int, int, int, void*); typedef int (*iFpppipppp_t)(void*, void*, void*, int, void*, void*, void*, void*); typedef int (*iFpppipppppp_t)(void*, void*, void*, int, void*, void*, void*, void*, void*, void*); typedef int (*iFpppippppppp_t)(void*, void*, void*, int, void*, void*, void*, void*, void*, void*, void*); +typedef void* (*pFpipA_t)(void*, int, void*, va_list); +typedef void (*vFpipA_t)(void*, int, void*, va_list); +typedef void (*vFppA_t)(void*, void*, va_list); #define SUPER() \ GO(g_list_free_full, vFpp_t) \ GO(g_markup_vprintf_escaped, pFpA_t) \ GO(g_build_filenamev, pFp_t) \ - GO(g_timeout_add_full, uFiuppp_t) \ + GO(g_timeout_add_full, uFiuppp_t) \ GO(g_datalist_id_set_data_full, vFpupp_t) \ GO(g_datalist_id_dup_data, pFpupp_t) \ GO(g_datalist_id_replace_data, iFpupppp_t) \ @@ -143,6 +146,11 @@ typedef int (*iFpppippppppp_t)(void*, void*, void*, int, void*, void*, void*, vo GO(g_timeout_add_seconds_full, uFiuppp_t) \ GO(g_log_set_handler, uFpipp_t) \ GO(g_set_error_literal, vFppip_t) \ + GO(g_error_new_valist, pFpipA_t) \ + GO(g_logv, vFpipA_t) \ + GO(g_string_append_vprintf, vFppA_t) \ + GO(g_string_vprintf, vFppA_t) \ + GO(g_strjoinv, pFpA_t) \ typedef struct glib2_my_s { @@ -175,14 +183,15 @@ EXPORT void* my_g_markup_vprintf_escaped(x64emu_t *emu, void* fmt, void* b) { return my->g_markup_vprintf_escaped(fmt, VARARGS); } -EXPORT void* my_g_build_filename(x64emu_t* emu, void* first, void** b) +EXPORT void* my_g_build_filename(x64emu_t* emu, void* first, uintptr_t* b) { glib2_my_t *my = (glib2_my_t*)my_lib->priv.w.p2; - int i = 0; - while (b[i++]); - void* array[i+1]; // +1 for 1st (NULL terminal already included) + int n = 0; + while (getVArgs(emu, 1, b, n++)); + void* array[n+1]; // +1 for 1st (NULL terminal already included) array[0] = first; - memcpy(array+1, b, sizeof(void*)*i); + for(int i=0; ig_build_filenamev(array); return ret; } @@ -1263,20 +1272,20 @@ EXPORT void* my_g_slist_sort_with_data(x64emu_t *emu, void* list, void* f, void* return my->g_slist_sort_with_data(list, findGCompareDataFuncFct(f), data); } -EXPORT void* my_g_build_path(x64emu_t *emu, void* sep, void* first, void** data) +EXPORT void* my_g_build_path(x64emu_t *emu, void* sep, void* first, uintptr_t* data) { glib2_my_t *my = (glib2_my_t*)my_lib->priv.w.p2; int n = (first)?1:0; - void* p = n?data[0]:NULL; + void* p = n?((void*)getVArgs(emu, 2, data, 0)):NULL; while(p) { - p = data[n++]; + p = (void*)getVArgs(emu, 2, data, n++); } ++n; // final NULL void** args = (void**)malloc(n *sizeof(void*)); args[0] = first; for(int i=1; ig_build_pathv(sep, args); free(args); return p; @@ -1348,6 +1357,118 @@ EXPORT void my_g_set_error(x64emu_t *emu, void* err, void* domain, int code, voi my->g_set_error_literal(err, domain, code, buf); } +EXPORT void* my_g_error_new(x64emu_t* emu, void* domain, int code, void* fmt, uintptr_t* b) +{ + glib2_my_t *my = (glib2_my_t*)my_lib->priv.w.p2; + myStackAlign(emu, fmt, b, emu->scratch, R_EAX, 3); + PREPARE_VALIST; + return my->g_error_new_valist(domain, code, fmt, VARARGS); +} +EXPORT void* my_g_error_new_valist(x64emu_t* emu, void* domain, int code, void* fmt, x64_va_list_t V) +{ + glib2_my_t *my = (glib2_my_t*)my_lib->priv.w.p2; + CONVERT_VALIST(V); + return my->g_error_new_valist(domain, code, fmt, VARARGS); +} + +EXPORT int my_g_fprintf(x64emu_t* emu, void* f, void* fmt, uintptr_t* b) +{ + glib2_my_t *my = (glib2_my_t*)my_lib->priv.w.p2; + myStackAlign(emu, fmt, b, emu->scratch, R_EAX, 3); + PREPARE_VALIST; + return my->g_vfprintf(f, fmt, VARARGS); +} + +EXPORT void my_g_logv(x64emu_t* emu, void* domain, int level, void* fmt, x64_va_list_t V) +{ + glib2_my_t *my = (glib2_my_t*)my_lib->priv.w.p2; + CONVERT_VALIST(V); + my->g_logv(domain, level, fmt, VARARGS); +} +EXPORT void my_g_log(x64emu_t* emu, void* domain, int level, void* fmt, uintptr_t* b) +{ + glib2_my_t *my = (glib2_my_t*)my_lib->priv.w.p2; + myStackAlign(emu, fmt, b, emu->scratch, R_EAX, 3); + PREPARE_VALIST; + my->g_logv(domain, level, fmt, VARARGS); +} + +EXPORT int my_g_printf(x64emu_t* emu, void* fmt, uintptr_t* b) +{ + glib2_my_t *my = (glib2_my_t*)my_lib->priv.w.p2; + myStackAlign(emu, fmt, b, emu->scratch, R_EAX, 1); + PREPARE_VALIST; + return my->g_vprintf(fmt, VARARGS); +} + +EXPORT int my_g_snprintf(x64emu_t* emu, void* buf, size_t l, void* fmt, uintptr_t* b) +{ + glib2_my_t *my = (glib2_my_t*)my_lib->priv.w.p2; + myStackAlign(emu, fmt, b, emu->scratch, R_EAX, 3); + PREPARE_VALIST; + return my->g_vsnprintf(buf, l, fmt, VARARGS); +} + +EXPORT int my_g_sprintf(x64emu_t* emu, void* buf, void* fmt, uintptr_t* b) +{ + glib2_my_t *my = (glib2_my_t*)my_lib->priv.w.p2; + myStackAlign(emu, fmt, b, emu->scratch, R_EAX, 2); + PREPARE_VALIST; + my->g_vsprintf(buf, fmt, VARARGS); +} + +EXPORT void* my_g_strdup_printf(x64emu_t* emu, void* fmt, uintptr_t* b) +{ + glib2_my_t *my = (glib2_my_t*)my_lib->priv.w.p2; + myStackAlign(emu, fmt, b, emu->scratch, R_EAX, 1); + PREPARE_VALIST; + return my->g_strdup_vprintf(fmt, VARARGS); +} + +EXPORT void my_g_string_append_printf(x64emu_t* emu, void* string, void* fmt, uintptr_t* b) +{ + glib2_my_t *my = (glib2_my_t*)my_lib->priv.w.p2; + myStackAlign(emu, fmt, b, emu->scratch, R_EAX, 2); + PREPARE_VALIST; + return my->g_string_append_vprintf(string, fmt, VARARGS); +} + +EXPORT void my_g_string_append_vprintf(x64emu_t* emu, void* string, void* fmt, x64_va_list_t V) +{ + glib2_my_t *my = (glib2_my_t*)my_lib->priv.w.p2; + CONVERT_VALIST(V); + return my->g_string_append_vprintf(string, fmt, VARARGS); +} + +EXPORT void my_g_string_printf(x64emu_t* emu, void* string, void* fmt, uintptr_t* b) +{ + glib2_my_t *my = (glib2_my_t*)my_lib->priv.w.p2; + myStackAlign(emu, fmt, b, emu->scratch, R_EAX, 2); + PREPARE_VALIST; + return my->g_string_vprintf(string, fmt, VARARGS); +} + +EXPORT void my_g_string_vprintf(x64emu_t* emu, void* string, void* fmt, x64_va_list_t V) +{ + glib2_my_t *my = (glib2_my_t*)my_lib->priv.w.p2; + CONVERT_VALIST(V); + return my->g_string_vprintf(string, fmt, VARARGS); +} + +EXPORT void* my_g_strjoin(x64emu_t* emu, void* a, uintptr_t* b) +{ + glib2_my_t *my = (glib2_my_t*)my_lib->priv.w.p2; + CREATE_VALIST_FROM_VAARG(b, emu->scratch, 1); + return my->g_strjoinv(a, VARARGS); +} + +EXPORT void* my_g_strjoinv(x64emu_t* emu, void* a, x64_va_list_t V) +{ + glib2_my_t *my = (glib2_my_t*)my_lib->priv.w.p2; + CONVERT_VALIST(V); + return my->g_strjoinv(a, VARARGS); +} + #define PRE_INIT \ if(box64_nogtk) \ diff --git a/src/wrapped/wrappedglib2_private.h b/src/wrapped/wrappedglib2_private.h index f2ddf805..eddacf55 100755 --- a/src/wrapped/wrappedglib2_private.h +++ b/src/wrapped/wrappedglib2_private.h @@ -357,9 +357,9 @@ GO(g_environ_unsetenv, pFpp) GO(g_error_copy, pFp) GO(g_error_free, vFp) GO(g_error_matches, iFppi) -GO2(g_error_new, pFpipV, g_error_new_valist) +GOM(g_error_new, pFEpipV) GO(g_error_new_literal, pFpip) -GO(g_error_new_valist, pFpipp) +GOM(g_error_new_valist, pFEpipA) GO(g_file_error_from_errno, iFi) GO(g_file_error_quark, pFv) GO(g_file_get_contents, iFpppp) @@ -378,7 +378,7 @@ GO(g_fopen, pFpp) GO(g_format_size, pFU) GO(g_format_size_for_display, pFI) GO(g_format_size_full, pFUi) -GO2(g_fprintf, iFEppV, my_g_vfprintf) +GOM(g_fprintf, iFEppV) GO(g_free, vFp) GO(g_freopen, pFppp) GO(g_get_application_name, pFv) @@ -610,14 +610,14 @@ GOM(g_list_sort, pFEpp) GOM(g_list_sort_with_data, pFEppp) GO(g_locale_from_utf8, pFplppp) GO(g_locale_to_utf8, pFplppp) -GO2(g_log, vFpppV, g_logv) +GOM(g_log, vFEpipV) GO(g_log_default_handler, vFpipp) GO(g_log_remove_handler, vFpu) GO(g_log_set_always_fatal, iFi) GOM(g_log_set_default_handler, pFEpp) GO(g_log_set_fatal_mask, iFpi) GOM(g_log_set_handler, uFEpipp) -GO(g_logv, vFpppp) // need align? +GOM(g_logv, vFEpipA) GO(g_lstat, iFpp) GO(g_main_context_acquire, iFp) GO(g_main_context_add_poll, vFppi) @@ -811,7 +811,7 @@ GO(g_poll, iFpui) //GO(g_prefix_error, vFpppppppppp) //vaarg, should align? GOM(g_print, vFEpV) GOM(g_printerr, vFEpV) -GO2(g_printf, iFEpV, my_g_vprintf) +GOM(g_printf, iFEpV) GOM(g_printf_string_upper_bound, uFEpp) GO(g_private_get, pFp) GOM(g_private_new, pFEp) @@ -1065,7 +1065,7 @@ GO(g_slist_remove_link, pFpp) GO(g_slist_reverse, pFp) GOM(g_slist_sort, pFEpp) GOM(g_slist_sort_with_data, pFEppp) -GO2(g_snprintf, iFEpLpV, my_g_vsnprintf) +GOM(g_snprintf, iFEpLpV) GO(g_source_add_child_source, vFpp) GO(g_source_add_poll, vFpp) GO(g_source_add_unix_fd, pFpii) @@ -1109,7 +1109,7 @@ GO(g_spawn_command_line_sync, iFppppp) GO(g_spawn_error_quark, pFv) GO(g_spawn_exit_error_quark, pFv) GOM(g_spawn_sync, iFEpppipppppp) -GO2(g_sprintf, iFEppV, my_g_vsprintf) +GOM(g_sprintf, iFEppV) GO(g_stat, iFpp) GO(g_static_mutex_free, vFp) GO(g_static_mutex_get_mutex_impl, pFp) @@ -1144,7 +1144,7 @@ GO(g_strcompress, pFp) GO(g_strdelimit, pFppC) GO(g_strdown, pFp) GO(g_strdup, pFp) -GO2(g_strdup_printf, pFEpV, my_g_strdup_vprintf) +GOM(g_strdup_printf, pFEpV) GO(g_strdupv, pFp) GOM(g_strdup_vprintf, pFEpp) GO(g_str_equal, iFpp) @@ -1157,10 +1157,10 @@ GO(g_str_has_suffix, iFpp) GO(g_string_append, pFpp) GO(g_string_append_c, pFpC) GO(g_string_append_len, pFppl) -GO2(g_string_append_printf, vFppV, g_string_append_vprintf) // need align? +GOM(g_string_append_printf, vFEppV) GO(g_string_append_unichar, pFpu) GO(g_string_append_uri_escaped, pFpppi) -GO(g_string_append_vprintf, vFppp) +GOM(g_string_append_vprintf, vFEppA) GO(g_string_ascii_down, pFp) GO(g_string_ascii_up, pFp) GO(g_string_assign, pFpp) @@ -1188,16 +1188,16 @@ GO(g_string_prepend, pFpp) GO(g_string_prepend_c, pFpC) GO(g_string_prepend_len, pFppl) GO(g_string_prepend_unichar, pFpu) -GO2(g_string_printf, vFppV, g_string_vprintf) // need align? +GOM(g_string_printf, vFEppV) GO(g_string_set_size, pFpL) GO(g_string_sized_new, pFL) GO(g_string_truncate, pFpL) GO(g_string_up, pFp) -GO(g_string_vprintf, vFppp) +GOM(g_string_vprintf, vFEppA) GO(g_strip_context, pFpp) GO(g_str_is_ascii, iFp) -GO2(g_strjoin, pFpV, g_strjoinv) -GO(g_strjoinv, pFpp) // no need to align, ony string pointers here +GOM(g_strjoin, pFEpV) +GOM(g_strjoinv, pFEpA) GO(g_strlcat, uFppu) GO(g_strlcpy, uFppu) GO(g_str_match_string, iFppi) diff --git a/src/wrapped/wrappedgobject2.c b/src/wrapped/wrappedgobject2.c index 5b8653fc..fb43f836 100755 --- a/src/wrapped/wrappedgobject2.c +++ b/src/wrapped/wrappedgobject2.c @@ -561,6 +561,7 @@ EXPORT uint32_t my_g_signal_new(x64emu_t* emu, void* name, size_t itype, int fla void* cb_acc = findAccumulatorFct(acc); void* cb_marsh = findMarshalFct(marsh); + my_add_signal_offset(itype, offset, n); // register the signal for later use switch(n) { case 0: return my->g_signal_new(name, itype, flags, offset, cb_acc, accu_data, cb_marsh, rtype, n); case 1: return my->g_signal_new(name, itype, flags, offset, cb_acc, accu_data, cb_marsh, rtype, n, b[0]); diff --git a/src/wrapped/wrappedgtkx112.c b/src/wrapped/wrappedgtkx112.c index 5bcba415..06db13c1 100755 --- a/src/wrapped/wrappedgtkx112.c +++ b/src/wrapped/wrappedgtkx112.c @@ -31,6 +31,7 @@ typedef void* (*pFp_t)(void*); typedef double (*dFp_t)(void*); typedef void* (*pFL_t)(size_t); typedef int (*iFip_t)(int, void*); +typedef void* (*pFip_t)(int, void*); typedef int (*iFpp_t)(void*, void*); typedef size_t (*LFLp_t)(size_t, void*); typedef void* (*pFpp_t)(void*, void*); @@ -52,6 +53,7 @@ typedef void (*vFppppp_t)(void*, void*, void*, void*, void*); typedef void (*vFpuipp_t)(void*, uint32_t, int, void*, void*); typedef void (*vFppupp_t)(void*, void*, uint32_t, void*, void*); typedef uint32_t (*uFiipppp_t)(int, int, void*, void*, void*, void*); +typedef void (*vFppippi_t)(void*, void*, int, void*, void*, int); typedef unsigned long (*LFpppppi_t)(void*, void*, void*, void*, void*, int); typedef int (*iFpppppp_t)(void*, void*, void*, void*, void*, void*); typedef void (*vFpuipuV_t)(void*, uint32_t, int, void*, uint32_t, ...); @@ -77,6 +79,7 @@ typedef void* (*pFpipppppppi_t)(void*, int, void*, void*, void*, void*, GO(gtk_tree_view_get_type, LFv_t) \ GO(gtk_window_get_type, LFv_t) \ GO(gtk_table_get_type, LFv_t) \ + GO(gtk_fixed_get_type, LFv_t) \ GO(gtk_type_class, pFL_t) \ GO(gtk_button_get_label, pFp_t) \ GO(gtk_signal_connect_full, LFppppppii_t) \ @@ -130,6 +133,9 @@ typedef void* (*pFpipppppppi_t)(void*, int, void*, void*, void*, void*, GO(gtk_input_add_full, uFiipppp_t) \ GO(gtk_list_store_set_valist, vFppA_t) \ GO(gtk_widget_style_get_valist, vFppA_t) \ + GO(gtk_list_store_insert_with_valuesv, vFppippi_t) \ + GO(gtk_list_store_newv, pFip_t) \ + GO(gtk_tree_store_newv, pFip_t) \ @@ -639,10 +645,11 @@ EXPORT void my_gtk_dialog_add_buttons(x64emu_t* emu, void* dialog, void* first, gtkx112_my_t *my = (gtkx112_my_t*)lib->priv.w.p2; void* btn = first; + int n = 0; while(btn) { - uintptr_t id = *(b++); + uintptr_t id = getVArgs(emu, 2, b, n++); my->gtk_dialog_add_button(dialog, btn, id); - btn = (void*)*(b++); + btn = (void*)getVArgs(emu, 2, b, n++); } } @@ -990,9 +997,7 @@ typedef struct my_GSList_s { struct my_GSList_s *next; } my_GSList_t; -static int regs_abi[] = {_DI, _SI, _DX, _CX, _R8, _R9}; -#define NEXT5(A, N) (N+5<6)?((void*)emu->regs[regs_abi[5+N]].q[0]):A[5+N-6] -EXPORT void my_gtk_binding_entry_add_signal(x64emu_t* emu, void* binding, uint32_t keyval, int mod, void* name, uint32_t n, void** st) +EXPORT void my_gtk_binding_entry_add_signal(x64emu_t* emu, void* binding, uint32_t keyval, int mod, void* name, uint32_t n, uintptr_t* b) { library_t * lib = GetLibInternal(libname); gtkx112_my_t *my = (gtkx112_my_t*)lib->priv.w.p2; @@ -1003,7 +1008,7 @@ EXPORT void my_gtk_binding_entry_add_signal(x64emu_t* emu, void* binding, uint32 // build the list my_GSList_t *list = calloc(n, sizeof(my_GSList_t)); for(uint32_t i=0; igtk_input_add_full(source, condition, findGdkInputFunctionFct(func), findGtkCallbackMarshalFct(marshal), data, findGDestroyNotifyFct(destroy)); } +EXPORT void my_gtk_list_store_insert_with_values(x64emu_t* emu, void* store, void* iter, int pos, uintptr_t* b) +{ + library_t * lib = GetLibInternal(libname); + gtkx112_my_t *my = (gtkx112_my_t*)lib->priv.w.p2; + + int n = 0; + // find the number of args + while((int)getVArgs(emu, 3, b, n*2)!=-1) + ++n; + int* columns = (int*)malloc(sizeof(int)*(n+1)); + void** values = (void**)malloc(sizeof(void*)*(n+1)); + for (int i=0; igtk_list_store_insert_with_valuesv(store, iter, pos, columns, values, n); + free(columns); + free(values); +} + +EXPORT void* my_gtk_list_store_new(x64emu_t* emu, int n, uintptr_t* b) +{ + library_t * lib = GetLibInternal(libname); + gtkx112_my_t *my = (gtkx112_my_t*)lib->priv.w.p2; + + uintptr_t a[n]; + for(int i=0; igtk_list_store_newv(n, a); +} + +EXPORT void* my_gtk_tree_store_new(x64emu_t* emu, int n, uintptr_t* b) +{ + library_t * lib = GetLibInternal(libname); + gtkx112_my_t *my = (gtkx112_my_t*)lib->priv.w.p2; + + uintptr_t a[n]; + for(int i=0; igtk_tree_store_newv(n, a); +} + #define PRE_INIT \ if(box64_nogtk) \ return -1; @@ -1174,7 +1224,8 @@ EXPORT uint32_t my_gtk_input_add_full(x64emu_t* emu, int source, int condition, SetGtkTreeViewID(((gtkx112_my_t*)lib->priv.w.p2)->gtk_tree_view_get_type());\ SetGtkBinID(((gtkx112_my_t*)lib->priv.w.p2)->gtk_bin_get_type()); \ SetGtkWindowID(((gtkx112_my_t*)lib->priv.w.p2)->gtk_window_get_type()); \ - SetGtkTableID(((gtkx112_my_t*)lib->priv.w.p2)->gtk_table_get_type()); \ + SetGtkTableID(((gtkx112_my_t*)lib->priv.w.p2)->gtk_table_get_type()); \ + SetGtkFixedID(((gtkx112_my_t*)lib->priv.w.p2)->gtk_fixed_get_type()); \ lib->priv.w.needed = 2; \ lib->priv.w.neededlibs = (char**)calloc(lib->priv.w.needed, sizeof(char*)); \ lib->priv.w.neededlibs[0] = strdup("libgdk-x11-2.0.so.0"); \ diff --git a/src/wrapped/wrappedgtkx112_private.h b/src/wrapped/wrappedgtkx112_private.h index 707f335e..571866b3 100755 --- a/src/wrapped/wrappedgtkx112_private.h +++ b/src/wrapped/wrappedgtkx112_private.h @@ -1566,12 +1566,12 @@ GO(gtk_list_store_get_type, LFv) GO(gtk_list_store_insert, vFppi) GO(gtk_list_store_insert_after, vFppp) GO(gtk_list_store_insert_before, vFppp) -//GOM(gtk_list_store_insert_with_values, vFppiV) // wrap with gtk_list_store_insert_with_valuesv +GOM(gtk_list_store_insert_with_values, vFEppiV) GO(gtk_list_store_insert_with_valuesv, vFppippi) //TODO: check if GValues need alignement GO(gtk_list_store_iter_is_valid, iFpp) GO(gtk_list_store_move_after, vFppp) GO(gtk_list_store_move_before, vFppp) -GO2(gtk_list_store_new, pFiV, gtk_list_store_newv) +GOM(gtk_list_store_new, pFEiV) GO(gtk_list_store_newv, pFip) GO(gtk_list_store_prepend, vFpp) GO(gtk_list_store_remove, iFpp) @@ -3402,8 +3402,8 @@ GO(gtk_tree_store_iter_depth, iFpp) GO(gtk_tree_store_iter_is_valid, iFpp) GO(gtk_tree_store_move_after, vFppp) GO(gtk_tree_store_move_before, vFppp) -GO2(gtk_tree_store_new, pFuV, gtk_tree_store_newv) -GO(gtk_tree_store_newv, pFup) +GOM(gtk_tree_store_new, pFEiV) +GO(gtk_tree_store_newv, pFip) GO(gtk_tree_store_prepend, vFppp) GO(gtk_tree_store_remove, iFpp) GO(gtk_tree_store_reorder, vFppp) -- cgit 1.4.1