From 3431d34a9dc7928acae33233f640ce4008f31eef Mon Sep 17 00:00:00 2001 From: Yang Liu Date: Mon, 22 Dec 2025 23:01:58 +0800 Subject: [PATCH] [WRAPPER] Wrapped more gtk3 and related symbols --- src/emu/x64printer.c | 6 + src/wrapped/generated/functions_list.txt | 14 ++ src/wrapped/generated/wrappedgdk3types.h | 4 +- .../generated/wrappedgdkpixbuf2types.h | 2 + src/wrapped/generated/wrappedglib2types.h | 1 + src/wrapped/generated/wrappedgtk3types.h | 5 + src/wrapped/generated/wrappedlibctypes.h | 1 + src/wrapped/generated/wrapper.c | 6 + src/wrapped/generated/wrapper.h | 3 + src/wrapped/wrappedgdk3.c | 33 +++ src/wrapped/wrappedgdk3_private.h | 4 +- src/wrapped/wrappedgdkpixbuf2.c | 21 ++ src/wrapped/wrappedgdkpixbuf2_private.h | 2 +- src/wrapped/wrappedglib2.c | 33 +++ src/wrapped/wrappedglib2_private.h | 3 + src/wrapped/wrappedgtk3.c | 192 +++++++++++++----- src/wrapped/wrappedgtk3_private.h | 14 +- src/wrapped/wrappedlibc.c | 8 + src/wrapped/wrappedlibc_private.h | 3 + 19 files changed, 293 insertions(+), 62 deletions(-) diff --git a/src/emu/x64printer.c b/src/emu/x64printer.c index 67ed508180..79c24383af 100644 --- a/src/emu/x64printer.c +++ b/src/emu/x64printer.c @@ -931,6 +931,8 @@ void x64Print(x64emu_t* emu, char* buff, size_t buffsz, const char* func, int ti snprintf(buff, buffsz, "%04d|%p: Calling %s(%" PRIp ", %" PRIp ", %" PRIp ")", tid, *(void**)(R_RSP), func, (void*)R_RDI, (void*)R_RSI, (void*)R_RDX); } else if (w == vFppV) { snprintf(buff, buffsz, "%04d|%p: Calling %s(%" PRIp ", %" PRIp ", %" PRIp ")", tid, *(void**)(R_RSP), func, (void*)R_RDI, (void*)R_RSI, (void*)(R_RSP + 8)); + } else if (w == vFppA) { + snprintf(buff, buffsz, "%04d|%p: Calling %s(%" PRIp ", %" PRIp ", %" PRIp ")", tid, *(void**)(R_RSP), func, (void*)R_RDI, (void*)R_RSI, (void*)R_RDX); } else if (w == cFpdp) { snprintf(buff, buffsz, "%04d|%p: Calling %s(%" PRIp ", %" PRIf ", %" PRIp ")", tid, *(void**)(R_RSP), func, (void*)R_RDI, emu->xmm[0].d[0], (void*)R_RSI); } else if (w == wFppp) { @@ -4345,6 +4347,8 @@ void x64Print(x64emu_t* emu, char* buff, size_t buffsz, const char* func, int ti snprintf(buff, buffsz, "%04d|%p: Calling %s(%" PRIp ", %" PRIp ", %" PRIp ", %" PRIp ", %" PRIi32 ")", tid, *(void**)(R_RSP), func, (void*)R_RDI, (void*)R_RSI, (void*)R_RDX, (void*)R_RCX, (int32_t)R_R8); } else if (w == iFEppppp) { snprintf(buff, buffsz, "%04d|%p: Calling %s(%" PRIp ", %" PRIp ", %" PRIp ", %" PRIp ", %" PRIp ")", tid, *(void**)(R_RSP), func, (void*)R_RDI, (void*)R_RSI, (void*)R_RDX, (void*)R_RCX, (void*)R_R8); + } else if (w == iFEppppV) { + snprintf(buff, buffsz, "%04d|%p: Calling %s(%" PRIp ", %" PRIp ", %" PRIp ", %" PRIp ", %" PRIp ")", tid, *(void**)(R_RSP), func, (void*)R_RDI, (void*)R_RSI, (void*)R_RDX, (void*)R_RCX, (void*)(R_RSP + 8)); } else if (w == iFiiiipp) { snprintf(buff, buffsz, "%04d|%p: Calling %s(%" PRIi32 ", %" PRIi32 ", %" PRIi32 ", %" PRIi32 ", %" PRIp ", %" PRIp ")", tid, *(void**)(R_RSP), func, (int32_t)R_RDI, (int32_t)R_RSI, (int32_t)R_RDX, (int32_t)R_RCX, (void*)R_R8, (void*)R_R9); } else if (w == iFiiiuwp) { @@ -6317,6 +6321,8 @@ void x64Print(x64emu_t* emu, char* buff, size_t buffsz, const char* func, int ti snprintf(buff, buffsz, "%04d|%p: Calling %s(%" PRIp ", %" PRIp ", %" PRIp ", %" PRIp ", %" PRIp ", %" PRIp ", %" PRIp ", %" PRIp ", %" PRIp ")", tid, *(void**)(R_RSP), func, (void*)R_RDI, (void*)R_RSI, (void*)R_RDX, (void*)R_RCX, (void*)R_R8, (void*)R_R9, *(void**)(R_RSP + 8), *(void**)(R_RSP + 16), *(void**)(R_RSP + 24)); } else if (w == uFEipuppppp) { snprintf(buff, buffsz, "%04d|%p: Calling %s(%" PRIi32 ", %" PRIp ", %" PRIu32 ", %" PRIp ", %" PRIp ", %" PRIp ", %" PRIp ", %" PRIp ")", tid, *(void**)(R_RSP), func, (int32_t)R_RDI, (void*)R_RSI, (uint32_t)R_RDX, (void*)R_RCX, (void*)R_R8, (void*)R_R9, *(void**)(R_RSP + 8), *(void**)(R_RSP + 16)); + } else if (w == uFEppuipppp) { + snprintf(buff, buffsz, "%04d|%p: Calling %s(%" PRIp ", %" PRIp ", %" PRIu32 ", %" PRIi32 ", %" PRIp ", %" PRIp ", %" PRIp ", %" PRIp ")", tid, *(void**)(R_RSP), func, (void*)R_RDI, (void*)R_RSI, (uint32_t)R_RDX, (int32_t)R_RCX, (void*)R_R8, (void*)R_R9, *(void**)(R_RSP + 8), *(void**)(R_RSP + 16)); } else if (w == uFEpppufppp) { snprintf(buff, buffsz, "%04d|%p: Calling %s(%" PRIp ", %" PRIp ", %" PRIp ", %" PRIu32 ", %" PRIf ", %" PRIp ", %" PRIp ", %" PRIp ")", tid, *(void**)(R_RSP), func, (void*)R_RDI, (void*)R_RSI, (void*)R_RDX, (uint32_t)R_RCX, emu->xmm[0].f[0], (void*)R_R8, (void*)R_R9, *(void**)(R_RSP + 8)); } else if (w == uFuulpiuiuf) { diff --git a/src/wrapped/generated/functions_list.txt b/src/wrapped/generated/functions_list.txt index 8bff73e166..7140050ec3 100644 --- a/src/wrapped/generated/functions_list.txt +++ b/src/wrapped/generated/functions_list.txt @@ -515,6 +515,7 @@ #() vFppL #() vFppp #() vFppV +#() vFppA #() vFpHi #() vFSpi #() vFSpL @@ -2380,6 +2381,7 @@ #() iFEppupp #() iFEppppi #() iFEppppp +#() iFEppppV #() iFiiiipp #() iFiiiuwp #() iFiippiu @@ -3421,6 +3423,7 @@ #() iFppppppppu #() iFppppppppp #() uFEipuppppp +#() uFEppuipppp #() uFEpppufppp #() uFuulpiuiuf #() uFpuupuppuu @@ -4193,7 +4196,11 @@ wrappedgdk3: - gdk_threads_add_idle_full - uFiuppp: - gdk_threads_add_timeout_full +- uFppuipppp: + - gdk_seat_grab wrappedgdkpixbuf2: +- iFppppV: + - gdk_pixbuf_save - pFpiiiiiipp: - gdk_pixbuf_new_from_data wrappedgdkx112: @@ -4350,6 +4357,7 @@ wrappedglib2: - g_array_sort_with_data - g_hash_table_foreach - g_list_foreach + - g_log_set_writer_func - g_main_context_invoke - g_option_context_add_main_entries - g_option_group_set_parse_hooks @@ -4736,13 +4744,18 @@ wrappedgtk3: - gtk_container_forall - gtk_container_foreach - gtk_menu_attach_to_widget + - gtk_widget_class_bind_template_callback_full - vFppV: - gtk_dialog_add_buttons + - gtk_list_store_set - gtk_message_dialog_format_secondary_markup - gtk_message_dialog_format_secondary_text + - gtk_tree_model_get - gtk_tree_store_set - gtk_widget_style_get - vFppA: + - gtk_list_store_set_valist + - gtk_tree_model_get_valist - gtk_tree_store_set_valist - vFppiV: - gtk_list_store_insert_with_values @@ -5131,6 +5144,7 @@ wrappedlibc: - iFppV: - __asprintf - __isoc23_sscanf + - __isoc23_swscanf - __isoc99_fscanf - __isoc99_sscanf - __isoc99_swscanf diff --git a/src/wrapped/generated/wrappedgdk3types.h b/src/wrapped/generated/wrappedgdk3types.h index bd2f42b844..af9fff8330 100644 --- a/src/wrapped/generated/wrappedgdk3types.h +++ b/src/wrapped/generated/wrappedgdk3types.h @@ -17,6 +17,7 @@ typedef uint32_t (*uFpp_t)(void*, void*); typedef void (*vFppp_t)(void*, void*, void*); typedef uint32_t (*uFippp_t)(int32_t, void*, void*, void*); typedef uint32_t (*uFiuppp_t)(int32_t, uint32_t, void*, void*, void*); +typedef uint32_t (*uFppuipppp_t)(void*, void*, uint32_t, int32_t, void*, void*, void*, void*); #define SUPER() ADDED_FUNCTIONS() \ GO(gdk_init, vFpp_t) \ @@ -27,6 +28,7 @@ typedef uint32_t (*uFiuppp_t)(int32_t, uint32_t, void*, void*, void*); GO(gdk_window_add_filter, vFppp_t) \ GO(gdk_window_remove_filter, vFppp_t) \ GO(gdk_threads_add_idle_full, uFippp_t) \ - GO(gdk_threads_add_timeout_full, uFiuppp_t) + GO(gdk_threads_add_timeout_full, uFiuppp_t) \ + GO(gdk_seat_grab, uFppuipppp_t) #endif // __wrappedgdk3TYPES_H_ diff --git a/src/wrapped/generated/wrappedgdkpixbuf2types.h b/src/wrapped/generated/wrappedgdkpixbuf2types.h index 4185ffd03e..1de359bf15 100644 --- a/src/wrapped/generated/wrappedgdkpixbuf2types.h +++ b/src/wrapped/generated/wrappedgdkpixbuf2types.h @@ -11,9 +11,11 @@ #define ADDED_FUNCTIONS() #endif +typedef int32_t (*iFppppV_t)(void*, void*, void*, void*, ...); typedef void* (*pFpiiiiiipp_t)(void*, int32_t, int32_t, int32_t, int32_t, int32_t, int32_t, void*, void*); #define SUPER() ADDED_FUNCTIONS() \ + GO(gdk_pixbuf_save, iFppppV_t) \ GO(gdk_pixbuf_new_from_data, pFpiiiiiipp_t) #endif // __wrappedgdkpixbuf2TYPES_H_ diff --git a/src/wrapped/generated/wrappedglib2types.h b/src/wrapped/generated/wrappedglib2types.h index 53725bb6a6..14a5c3653c 100644 --- a/src/wrapped/generated/wrappedglib2types.h +++ b/src/wrapped/generated/wrappedglib2types.h @@ -112,6 +112,7 @@ typedef int32_t (*iFpppuppppppp_t)(void*, void*, void*, uint32_t, void*, void*, GO(g_array_sort_with_data, vFppp_t) \ GO(g_hash_table_foreach, vFppp_t) \ GO(g_list_foreach, vFppp_t) \ + GO(g_log_set_writer_func, vFppp_t) \ GO(g_main_context_invoke, vFppp_t) \ GO(g_option_context_add_main_entries, vFppp_t) \ GO(g_option_group_set_parse_hooks, vFppp_t) \ diff --git a/src/wrapped/generated/wrappedgtk3types.h b/src/wrapped/generated/wrappedgtk3types.h index b7961e8f6f..22e23963d5 100644 --- a/src/wrapped/generated/wrappedgtk3types.h +++ b/src/wrapped/generated/wrappedgtk3types.h @@ -46,11 +46,16 @@ typedef void (*vFpppppuu_t)(void*, void*, void*, void*, void*, uint32_t, uint32_ GO(gtk_container_forall, vFppp_t) \ GO(gtk_container_foreach, vFppp_t) \ GO(gtk_menu_attach_to_widget, vFppp_t) \ + GO(gtk_widget_class_bind_template_callback_full, vFppp_t) \ GO(gtk_dialog_add_buttons, vFppV_t) \ + GO(gtk_list_store_set, vFppV_t) \ GO(gtk_message_dialog_format_secondary_markup, vFppV_t) \ GO(gtk_message_dialog_format_secondary_text, vFppV_t) \ + GO(gtk_tree_model_get, vFppV_t) \ GO(gtk_tree_store_set, vFppV_t) \ GO(gtk_widget_style_get, vFppV_t) \ + GO(gtk_list_store_set_valist, vFppA_t) \ + GO(gtk_tree_model_get_valist, vFppA_t) \ GO(gtk_tree_store_set_valist, vFppA_t) \ GO(gtk_list_store_insert_with_values, vFppiV_t) \ GO(gtk_enumerate_printers, vFpppi_t) \ diff --git a/src/wrapped/generated/wrappedlibctypes.h b/src/wrapped/generated/wrappedlibctypes.h index 1d3d009c4a..8040d26c0c 100644 --- a/src/wrapped/generated/wrappedlibctypes.h +++ b/src/wrapped/generated/wrappedlibctypes.h @@ -246,6 +246,7 @@ typedef int32_t (*iFppipppp_t)(void*, void*, int32_t, void*, void*, void*, void* GO(execvpe, iFppp_t) \ GO(__asprintf, iFppV_t) \ GO(__isoc23_sscanf, iFppV_t) \ + GO(__isoc23_swscanf, iFppV_t) \ GO(__isoc99_fscanf, iFppV_t) \ GO(__isoc99_sscanf, iFppV_t) \ GO(__isoc99_swscanf, iFppV_t) \ diff --git a/src/wrapped/generated/wrapper.c b/src/wrapped/generated/wrapper.c index 3041d69b2d..f250d1cf57 100644 --- a/src/wrapped/generated/wrapper.c +++ b/src/wrapped/generated/wrapper.c @@ -549,6 +549,7 @@ 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 void (*vFppA_t)(void*, void*, void*); typedef void (*vFpHi_t)(void*, unsigned __int128, int32_t); typedef void (*vFSpi_t)(void*, void*, int32_t); typedef void (*vFSpL_t)(void*, void*, uintptr_t); @@ -2408,6 +2409,7 @@ typedef int32_t (*iFEpUppp_t)(x64emu_t*, void*, uint64_t, void*, void*, void*); typedef int32_t (*iFEppupp_t)(x64emu_t*, void*, void*, uint32_t, void*, void*); typedef int32_t (*iFEppppi_t)(x64emu_t*, void*, void*, void*, void*, int32_t); typedef int32_t (*iFEppppp_t)(x64emu_t*, void*, void*, void*, void*, void*); +typedef int32_t (*iFEppppV_t)(x64emu_t*, void*, void*, void*, void*, void*); typedef int32_t (*iFiiiipp_t)(int32_t, int32_t, int32_t, int32_t, void*, void*); typedef int32_t (*iFiiiuwp_t)(int32_t, int32_t, int32_t, uint32_t, int16_t, void*); typedef int32_t (*iFiippiu_t)(int32_t, int32_t, void*, void*, int32_t, uint32_t); @@ -3447,6 +3449,7 @@ typedef int32_t (*iFppppppupp_t)(void*, void*, void*, void*, void*, void*, uint3 typedef int32_t (*iFppppppppu_t)(void*, void*, void*, void*, void*, void*, void*, void*, uint32_t); typedef int32_t (*iFppppppppp_t)(void*, void*, void*, void*, void*, void*, void*, void*, void*); typedef uint32_t (*uFEipuppppp_t)(x64emu_t*, int32_t, void*, uint32_t, void*, void*, void*, void*, void*); +typedef uint32_t (*uFEppuipppp_t)(x64emu_t*, void*, void*, uint32_t, int32_t, void*, void*, void*, void*); typedef uint32_t (*uFEpppufppp_t)(x64emu_t*, void*, void*, void*, uint32_t, float, void*, void*, void*); typedef uint32_t (*uFuulpiuiuf_t)(uint32_t, uint32_t, intptr_t, void*, int32_t, uint32_t, int32_t, uint32_t, float); typedef uint32_t (*uFpuupuppuu_t)(void*, uint32_t, uint32_t, void*, uint32_t, void*, void*, uint32_t, uint32_t); @@ -4435,6 +4438,7 @@ void vFppl(x64emu_t *emu, uintptr_t fcn) { vFppl_t fn = (vFppl_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, (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 vFppA(x64emu_t *emu, uintptr_t fcn) { vFppA_t fn = (vFppA_t)fcn; fn((void*)R_RDI, (void*)R_RSI, (void*)R_RDX); } void vFpHi(x64emu_t *emu, uintptr_t fcn) { vFpHi_t fn = (vFpHi_t)fcn; fn((void*)R_RDI, (unsigned __int128)R_RSI + ((unsigned __int128)R_RDX << 64), (int32_t)R_RCX); } void vFSpi(x64emu_t *emu, uintptr_t fcn) { vFSpi_t fn = (vFSpi_t)fcn; fn(io_convert((void*)R_RDI), (void*)R_RSI, (int32_t)R_RDX); } void vFSpL(x64emu_t *emu, uintptr_t fcn) { vFSpL_t fn = (vFSpL_t)fcn; fn(io_convert((void*)R_RDI), (void*)R_RSI, (uintptr_t)R_RDX); } @@ -6294,6 +6298,7 @@ void iFEpUppp(x64emu_t *emu, uintptr_t fcn) { iFEpUppp_t fn = (iFEpUppp_t)fcn; R void iFEppupp(x64emu_t *emu, uintptr_t fcn) { iFEppupp_t fn = (iFEppupp_t)fcn; R_RAX=(uint32_t)fn(emu, (void*)R_RDI, (void*)R_RSI, (uint32_t)R_RDX, (void*)R_RCX, (void*)R_R8); } void iFEppppi(x64emu_t *emu, uintptr_t fcn) { iFEppppi_t fn = (iFEppppi_t)fcn; R_RAX=(uint32_t)fn(emu, (void*)R_RDI, (void*)R_RSI, (void*)R_RDX, (void*)R_RCX, (int32_t)R_R8); } void iFEppppp(x64emu_t *emu, uintptr_t fcn) { iFEppppp_t fn = (iFEppppp_t)fcn; R_RAX=(uint32_t)fn(emu, (void*)R_RDI, (void*)R_RSI, (void*)R_RDX, (void*)R_RCX, (void*)R_R8); } +void iFEppppV(x64emu_t *emu, uintptr_t fcn) { iFEppppV_t fn = (iFEppppV_t)fcn; R_RAX=(uint32_t)fn(emu, (void*)R_RDI, (void*)R_RSI, (void*)R_RDX, (void*)R_RCX, (void*)(R_RSP + 8)); } void iFiiiipp(x64emu_t *emu, uintptr_t fcn) { iFiiiipp_t fn = (iFiiiipp_t)fcn; R_RAX=(uint32_t)fn((int32_t)R_RDI, (int32_t)R_RSI, (int32_t)R_RDX, (int32_t)R_RCX, (void*)R_R8, (void*)R_R9); } void iFiiiuwp(x64emu_t *emu, uintptr_t fcn) { iFiiiuwp_t fn = (iFiiiuwp_t)fcn; R_RAX=(uint32_t)fn((int32_t)R_RDI, (int32_t)R_RSI, (int32_t)R_RDX, (uint32_t)R_RCX, (int16_t)R_R8, (void*)R_R9); } void iFiippiu(x64emu_t *emu, uintptr_t fcn) { iFiippiu_t fn = (iFiippiu_t)fcn; R_RAX=(uint32_t)fn((int32_t)R_RDI, (int32_t)R_RSI, (void*)R_RDX, (void*)R_RCX, (int32_t)R_R8, (uint32_t)R_R9); } @@ -7333,6 +7338,7 @@ void iFppppppupp(x64emu_t *emu, uintptr_t fcn) { iFppppppupp_t fn = (iFppppppupp void iFppppppppu(x64emu_t *emu, uintptr_t fcn) { iFppppppppu_t fn = (iFppppppppu_t)fcn; R_RAX=(uint32_t)fn((void*)R_RDI, (void*)R_RSI, (void*)R_RDX, (void*)R_RCX, (void*)R_R8, (void*)R_R9, *(void**)(R_RSP + 8), *(void**)(R_RSP + 16), *(uint32_t*)(R_RSP + 24)); } void iFppppppppp(x64emu_t *emu, uintptr_t fcn) { iFppppppppp_t fn = (iFppppppppp_t)fcn; R_RAX=(uint32_t)fn((void*)R_RDI, (void*)R_RSI, (void*)R_RDX, (void*)R_RCX, (void*)R_R8, (void*)R_R9, *(void**)(R_RSP + 8), *(void**)(R_RSP + 16), *(void**)(R_RSP + 24)); } void uFEipuppppp(x64emu_t *emu, uintptr_t fcn) { uFEipuppppp_t fn = (uFEipuppppp_t)fcn; R_RAX=(uint32_t)fn(emu, (int32_t)R_RDI, (void*)R_RSI, (uint32_t)R_RDX, (void*)R_RCX, (void*)R_R8, (void*)R_R9, *(void**)(R_RSP + 8), *(void**)(R_RSP + 16)); } +void uFEppuipppp(x64emu_t *emu, uintptr_t fcn) { uFEppuipppp_t fn = (uFEppuipppp_t)fcn; R_RAX=(uint32_t)fn(emu, (void*)R_RDI, (void*)R_RSI, (uint32_t)R_RDX, (int32_t)R_RCX, (void*)R_R8, (void*)R_R9, *(void**)(R_RSP + 8), *(void**)(R_RSP + 16)); } void uFEpppufppp(x64emu_t *emu, uintptr_t fcn) { uFEpppufppp_t fn = (uFEpppufppp_t)fcn; R_RAX=(uint32_t)fn(emu, (void*)R_RDI, (void*)R_RSI, (void*)R_RDX, (uint32_t)R_RCX, emu->xmm[0].f[0], (void*)R_R8, (void*)R_R9, *(void**)(R_RSP + 8)); } void uFuulpiuiuf(x64emu_t *emu, uintptr_t fcn) { uFuulpiuiuf_t fn = (uFuulpiuiuf_t)fcn; R_RAX=(uint32_t)fn((uint32_t)R_RDI, (uint32_t)R_RSI, (intptr_t)R_RDX, (void*)R_RCX, (int32_t)R_R8, (uint32_t)R_R9, *(int32_t*)(R_RSP + 8), *(uint32_t*)(R_RSP + 16), emu->xmm[0].f[0]); } void uFpuupuppuu(x64emu_t *emu, uintptr_t fcn) { uFpuupuppuu_t fn = (uFpuupuppuu_t)fcn; R_RAX=(uint32_t)fn((void*)R_RDI, (uint32_t)R_RSI, (uint32_t)R_RDX, (void*)R_RCX, (uint32_t)R_R8, (void*)R_R9, *(void**)(R_RSP + 8), *(uint32_t*)(R_RSP + 16), *(uint32_t*)(R_RSP + 24)); } diff --git a/src/wrapped/generated/wrapper.h b/src/wrapped/generated/wrapper.h index eb419706d5..84de694a61 100644 --- a/src/wrapped/generated/wrapper.h +++ b/src/wrapped/generated/wrapper.h @@ -552,6 +552,7 @@ 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 vFppA(x64emu_t *emu, uintptr_t fnc); void vFpHi(x64emu_t *emu, uintptr_t fnc); void vFSpi(x64emu_t *emu, uintptr_t fnc); void vFSpL(x64emu_t *emu, uintptr_t fnc); @@ -2417,6 +2418,7 @@ void iFEpUppp(x64emu_t *emu, uintptr_t fnc); void iFEppupp(x64emu_t *emu, uintptr_t fnc); void iFEppppi(x64emu_t *emu, uintptr_t fnc); void iFEppppp(x64emu_t *emu, uintptr_t fnc); +void iFEppppV(x64emu_t *emu, uintptr_t fnc); void iFiiiipp(x64emu_t *emu, uintptr_t fnc); void iFiiiuwp(x64emu_t *emu, uintptr_t fnc); void iFiippiu(x64emu_t *emu, uintptr_t fnc); @@ -3458,6 +3460,7 @@ void iFppppppupp(x64emu_t *emu, uintptr_t fnc); void iFppppppppu(x64emu_t *emu, uintptr_t fnc); void iFppppppppp(x64emu_t *emu, uintptr_t fnc); void uFEipuppppp(x64emu_t *emu, uintptr_t fnc); +void uFEppuipppp(x64emu_t *emu, uintptr_t fnc); void uFEpppufppp(x64emu_t *emu, uintptr_t fnc); void uFuulpiuiuf(x64emu_t *emu, uintptr_t fnc); void uFpuupuppuu(x64emu_t *emu, uintptr_t fnc); diff --git a/src/wrapped/wrappedgdk3.c b/src/wrapped/wrappedgdk3.c index 6ba413a168..835c57452b 100644 --- a/src/wrapped/wrappedgdk3.c +++ b/src/wrapped/wrappedgdk3.c @@ -146,6 +146,34 @@ static void* findEventHandlerFct(void* fct) return NULL; } +// GdkSeatGrabPrepareFunc +#define GO(A) \ + static uintptr_t my_GdkSeatGrabPrepareFunc_fct_##A = 0; \ + static void* my_GdkSeatGrabPrepareFunc_##A(void* a, void* b, void* c) \ + { \ + return (void*)RunFunctionFmt(my_GdkSeatGrabPrepareFunc_fct_##A, "ppp", a, b, c); \ + } +SUPER() +#undef GO +static void* findGdkSeatGrabPrepareFuncFct(void* fct) +{ + if (!fct) return fct; + if (GetNativeFnc((uintptr_t)fct)) return GetNativeFnc((uintptr_t)fct); +#define GO(A) \ + if (my_GdkSeatGrabPrepareFunc_fct_##A == (uintptr_t)fct) return my_GdkSeatGrabPrepareFunc_##A; + SUPER() +#undef GO +#define GO(A) \ + if (my_GdkSeatGrabPrepareFunc_fct_##A == 0) { \ + my_GdkSeatGrabPrepareFunc_fct_##A = (uintptr_t)fct; \ + return my_GdkSeatGrabPrepareFunc_##A; \ + } + SUPER() +#undef GO + printf_log(LOG_NONE, "Warning, no more slot for gdk3 GdkSeatGrabPrepareFunc\n"); + return NULL; +} + #undef SUPER @@ -198,6 +226,11 @@ EXPORT void my3_gdk_threads_set_lock_functions(x64emu_t* emu, void* enter_fn, vo my->gdk_threads_set_lock_functions(findGCallbackFct(enter_fn), findGCallbackFct(leave_fn)); } +EXPORT uint32_t my3_gdk_seat_grab(x64emu_t* emu, void* seat, void* window, uint32_t cap, int oes, void* cursor, void* ev, void* func, void* data) +{ + return my->gdk_seat_grab(seat, window, cap, oes, cursor, ev, findGdkSeatGrabPrepareFuncFct(func), data); +} + #define PRE_INIT \ if (BOX64ENV(nogtk)) return -2; diff --git a/src/wrapped/wrappedgdk3_private.h b/src/wrapped/wrappedgdk3_private.h index b2b0081a3d..e6b1a93b4d 100644 --- a/src/wrapped/wrappedgdk3_private.h +++ b/src/wrapped/wrappedgdk3_private.h @@ -436,7 +436,7 @@ GO(gdk_seat_get_keyboard, pFp) GO(gdk_seat_get_pointer, pFp) GO(gdk_seat_get_slaves, pFpu) GO(gdk_seat_get_type, LFv) -//GOM(gdk_seat_grab, uFppuipppp) +GOM(gdk_seat_grab, uFEppuipppp) GO(gdk_seat_ungrab, vFp) GO(gdk_selection_convert, vFpppu) GO(gdk_selection_owner_get, pFp) @@ -756,7 +756,7 @@ GO(gdk_x11_screen_get_number_of_desktops, uFp) GO(gdk_x11_screen_get_screen_number, iFp) GO(gdk_x11_screen_get_type, LFv) GO(gdk_x11_screen_get_window_manager_name, pFp) -//GOM(gdk_x11_screen_get_xscreen, pFp) +GO(gdk_x11_screen_get_xscreen, pFp) GO(gdk_x11_screen_lookup_visual, pFpL) GO(gdk_x11_screen_supports_net_wm_hint, iFpp) GO(gdk_x11_set_sm_client_id, vFp) diff --git a/src/wrapped/wrappedgdkpixbuf2.c b/src/wrapped/wrappedgdkpixbuf2.c index 2d47b580a6..1fd742a7c9 100644 --- a/src/wrapped/wrappedgdkpixbuf2.c +++ b/src/wrapped/wrappedgdkpixbuf2.c @@ -16,12 +16,18 @@ #include "librarian.h" #include "box64context.h" #include "emu/x64emu_private.h" +#include "myalign.h" const char* gdkpixbuf2Name = "libgdk_pixbuf-2.0.so.0"; #define ALTNAME "libgdk_pixbuf-2.0.so" #define LIBNAME gdkpixbuf2 +typedef int32_t (*iFpppppp_t)(void*, void*, void*, void*, void*, void*); + +#define ADDED_FUNCTIONS() \ + GO(gdk_pixbuf_savev, iFpppppp_t) + #include "generated/wrappedgdkpixbuf2types.h" #include "wrappercallback.h" @@ -62,6 +68,21 @@ EXPORT void* my_gdk_pixbuf_new_from_data(x64emu_t* emu, void* data, int32_t colo return my->gdk_pixbuf_new_from_data(data, colorspace, has_alpha, bpp, w, h, stride, finddestroy_pixbufFct(destroy_func), destroy_data); } +EXPORT int my_gdk_pixbuf_save(x64emu_t* emu, void* pixbuf, void* filename, void* type, void* error, uintptr_t* b) +{ + int n = 0; + while ((((void*)getVArgs(emu, 4, b, n * 2))) != NULL) + n += 1; + char* keys[n]; + char* vals[n]; + for (int i = 0; i < n; ++i) { + keys[i] = (char*)getVArgs(emu, 4, b, i * 2 + 0); + vals[i] = (char*)getVArgs(emu, 4, b, i * 2 + 1); + } + + return my->gdk_pixbuf_savev(pixbuf, filename, type, keys, vals, error); +} + #define PRE_INIT \ if (BOX64ENV(nogtk)) return -2; diff --git a/src/wrapped/wrappedgdkpixbuf2_private.h b/src/wrapped/wrappedgdkpixbuf2_private.h index f90bc053a1..87a7ce4b91 100644 --- a/src/wrapped/wrappedgdkpixbuf2_private.h +++ b/src/wrapped/wrappedgdkpixbuf2_private.h @@ -96,7 +96,7 @@ GO(gdk_pixbuf_ref, pFp) GO(gdk_pixbuf_rotate_simple, pFpi) //GO(gdk_pixbuf_rotation_get_type, GO(gdk_pixbuf_saturate_and_pixelate, vFppfi) -//GO(gdk_pixbuf_save, iFpppppppppppppp) //vaarg, wrap with gdk_pixbuf_save? +GOM(gdk_pixbuf_save, iFEppppV) //GO(gdk_pixbuf_save_to_buffer, iFpppppppppppppp) //vaarg, wrap with gdk_pixbuf_save_to_bufferv ? GO(gdk_pixbuf_save_to_bufferv, iFppppppp) //GOM(gdk_pixbuf_save_to_callback, iFEpppppV) //wrap with gdk_pixbuf_save_to_callbackv diff --git a/src/wrapped/wrappedglib2.c b/src/wrapped/wrappedglib2.c index 4ed77d393e..4eea750b23 100644 --- a/src/wrapped/wrappedglib2.c +++ b/src/wrapped/wrappedglib2.c @@ -761,6 +761,34 @@ static void* findGTraverseFuncFct(void* fct) return NULL; } +// GLogWriterFunc ... +#define GO(A) \ + static uintptr_t my_GLogWriterFunc_fct_##A = 0; \ + static int my_GLogWriterFunc_##A(void* a, void* b) \ + { \ + return RunFunctionFmt(my_GLogWriterFunc_fct_##A, "pp", a, b); \ + } +SUPER() +#undef GO +static void* findLogWriterFct(void* fct) +{ + if (!fct) return fct; + if (GetNativeFnc((uintptr_t)fct)) return GetNativeFnc((uintptr_t)fct); +#define GO(A) \ + if (my_GLogWriterFunc_fct_##A == (uintptr_t)fct) return my_GLogWriterFunc_##A; + SUPER() +#undef GO +#define GO(A) \ + if (my_GLogWriterFunc_fct_##A == 0) { \ + my_GLogWriterFunc_fct_##A = (uintptr_t)fct; \ + return my_GLogWriterFunc_##A; \ + } + SUPER() +#undef GO + printf_log(LOG_NONE, "Warning, no more slot for glib2 GLogWriterFunc callback\n"); + return NULL; +} + #undef SUPER EXPORT void* my_g_markup_vprintf_escaped(x64emu_t *emu, void* fmt, void* b) { @@ -1255,6 +1283,11 @@ EXPORT uint32_t my_g_log_set_handler(x64emu_t *emu, void* domain, int level, voi return my->g_log_set_handler(domain, level, findGLogFuncFct(f), data); } +EXPORT void my_g_log_set_writer_func(x64emu_t* emu, void* f, void* data, void* notify) +{ + my->g_log_set_writer_func(findLogWriterFct(f), data, findDestroyFct(notify)); +} + EXPORT void my_g_set_error(x64emu_t *emu, void* err, void* domain, uint32_t code, void* fmt, uintptr_t* stack) { char buf[1000]; diff --git a/src/wrapped/wrappedglib2_private.h b/src/wrapped/wrappedglib2_private.h index 5eed01ddc0..72d8b458bb 100644 --- a/src/wrapped/wrappedglib2_private.h +++ b/src/wrapped/wrappedglib2_private.h @@ -614,6 +614,8 @@ 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) +GOM(g_log_set_writer_func, vFEppp) +GO(g_log_writer_default, iFipLp) GO(g_log_writer_is_journald, iFi) GOM(g_logv, vFEpipA) GO(g_log_structured_array, vFipL) @@ -1176,6 +1178,7 @@ GO(g_string_down, pFp) GO(g_string_equal, iFpp) GO(g_string_erase, pFpll) GO(g_string_free, pFpi) +GO(g_string_free_and_steal, pFp) GO(g_string_free_to_bytes, pFp) GO(g_string_hash, uFp) GO(g_string_insert, pFplp) diff --git a/src/wrapped/wrappedgtk3.c b/src/wrapped/wrappedgtk3.c index cc477a115a..b64669bfba 100644 --- a/src/wrapped/wrappedgtk3.c +++ b/src/wrapped/wrappedgtk3.c @@ -38,54 +38,57 @@ typedef void (*vFppp_t)(void*, void*, void*); typedef void (*vFppA_t)(void*, void*, va_list); typedef void (*vFpipV_t)(void*, int, void*, ...); typedef void (*vFppippi_t)(void*, void*, int, void*, void*, int); - -#define ADDED_FUNCTIONS() \ -GO(g_type_class_ref, pFL_t) \ -GO(g_type_class_unref, vFp_t) \ -GO(gtk_application_window_get_type, LFv_t) \ -GO(gtk_bin_get_type, LFv_t) \ -GO(gtk_widget_get_type, LFv_t) \ -GO(gtk_button_get_type, LFv_t) \ -GO(gtk_menu_button_get_type, LFv_t) \ -GO(gtk_container_get_type, LFv_t) \ -GO(gtk_misc_get_type, LFv_t) \ -GO(gtk_label_get_type, LFv_t) \ -GO(gtk_list_box_get_type, LFv_t) \ -GO(gtk_image_get_type, LFv_t) \ -GO(gtk_list_box_row_get_type, LFv_t) \ -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_combo_box_get_type, LFv_t) \ -GO(gtk_toggle_button_get_type, LFv_t) \ -GO(gtk_check_button_get_type, LFv_t) \ -GO(gtk_text_view_get_type, LFv_t) \ -GO(gtk_frame_get_type, LFv_t) \ -GO(gtk_entry_get_type, LFv_t) \ -GO(gtk_spin_button_get_type, LFv_t) \ -GO(gtk_progress_get_type, LFv_t) \ -GO(gtk_progress_bar_get_type, LFv_t) \ -GO(gtk_menu_shell_get_type, LFv_t) \ -GO(gtk_menu_bar_get_type, LFv_t) \ -GO(gtk_action_get_type, LFv_t) \ -GO(gtk_application_get_type, LFv_t) \ -GO(gtk_grid_get_type, LFv_t) \ -GO(gtk_event_controller_get_type, LFv_t) \ -GO(gtk_gesture_get_type, LFv_t) \ -GO(gtk_gesture_single_get_type, LFv_t) \ -GO(gtk_gesture_long_press_get_type, LFv_t) \ -GO(gtk_dialog_add_button, pFppi_t) \ -GO(gtk_spin_button_get_value, dFp_t) \ -GO(gtk_builder_lookup_callback_symbol, pFpp_t) \ -GO(g_module_symbol, iFppp_t) \ -GO(g_log, vFpipV_t) \ -GO(g_module_open, pFpu_t) \ -GO(g_module_close, vFp_t) \ -GO(gtk_tree_store_newv, pFup_t) \ -GO(gtk_widget_style_get_valist, vFppA_t) \ -GO(gtk_widget_style_get_property, vFppp_t) \ -GO(gtk_list_store_insert_with_valuesv, vFppippi_t) +typedef void (*vFppip_t)(void*, void*, int, void*); + +#define ADDED_FUNCTIONS() \ + GO(g_type_class_ref, pFL_t) \ + GO(g_type_class_unref, vFp_t) \ + GO(gtk_application_window_get_type, LFv_t) \ + GO(gtk_bin_get_type, LFv_t) \ + GO(gtk_widget_get_type, LFv_t) \ + GO(gtk_button_get_type, LFv_t) \ + GO(gtk_menu_button_get_type, LFv_t) \ + GO(gtk_container_get_type, LFv_t) \ + GO(gtk_misc_get_type, LFv_t) \ + GO(gtk_label_get_type, LFv_t) \ + GO(gtk_list_box_get_type, LFv_t) \ + GO(gtk_image_get_type, LFv_t) \ + GO(gtk_list_box_row_get_type, LFv_t) \ + 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_combo_box_get_type, LFv_t) \ + GO(gtk_toggle_button_get_type, LFv_t) \ + GO(gtk_check_button_get_type, LFv_t) \ + GO(gtk_text_view_get_type, LFv_t) \ + GO(gtk_frame_get_type, LFv_t) \ + GO(gtk_entry_get_type, LFv_t) \ + GO(gtk_spin_button_get_type, LFv_t) \ + GO(gtk_progress_get_type, LFv_t) \ + GO(gtk_progress_bar_get_type, LFv_t) \ + GO(gtk_menu_shell_get_type, LFv_t) \ + GO(gtk_menu_bar_get_type, LFv_t) \ + GO(gtk_action_get_type, LFv_t) \ + GO(gtk_application_get_type, LFv_t) \ + GO(gtk_grid_get_type, LFv_t) \ + GO(gtk_event_controller_get_type, LFv_t) \ + GO(gtk_gesture_get_type, LFv_t) \ + GO(gtk_gesture_single_get_type, LFv_t) \ + GO(gtk_gesture_long_press_get_type, LFv_t) \ + GO(gtk_dialog_add_button, pFppi_t) \ + GO(gtk_spin_button_get_value, dFp_t) \ + GO(gtk_builder_lookup_callback_symbol, pFpp_t) \ + GO(g_module_symbol, iFppp_t) \ + GO(g_log, vFpipV_t) \ + GO(g_module_open, pFpu_t) \ + GO(g_module_close, vFp_t) \ + GO(gtk_tree_store_newv, pFup_t) \ + GO(gtk_widget_style_get_valist, vFppA_t) \ + GO(gtk_widget_style_get_property, vFppp_t) \ + GO(gtk_list_store_insert_with_valuesv, vFppippi_t) \ + GO(gtk_tree_model_get_value, vFppip_t) \ + GO(gtk_list_store_set_value, vFppip_t) #include "generated/wrappedgtk3types.h" @@ -534,6 +537,34 @@ static void* findTranslateEvent(void* fct) return NULL; } +// GCallback +#define GO(A) \ + static uintptr_t my_GCallback_fct_##A = 0; \ + static void my_GCallback_##A(void* data) \ + { \ + RunFunctionFmt(my_GCallback_fct_##A, ""); \ + } +SUPER() +#undef GO +static void* findGCallbackFct(void* fct) +{ + if (!fct) return fct; + if (GetNativeFnc((uintptr_t)fct)) return GetNativeFnc((uintptr_t)fct); +#define GO(A) \ + if (my_GCallback_fct_##A == (uintptr_t)fct) return my_GCallback_##A; + SUPER() +#undef GO +#define GO(A) \ + if (my_GCallback_fct_##A == 0) { \ + my_GCallback_fct_##A = (uintptr_t)fct; \ + return my_GCallback_##A; \ + } + SUPER() +#undef GO + printf_log(LOG_NONE, "Warning, no more slot for gtk-3 GCallback callback\n"); + return NULL; +} + #undef SUPER EXPORT void my3_gtk_dialog_add_buttons(x64emu_t* emu, void* dialog, void* first, uintptr_t* b) @@ -775,10 +806,11 @@ EXPORT void my3_gtk_style_context_get(x64emu_t* emu, void* context, uint32_t fla EXPORT void my3_gtk_widget_style_get(x64emu_t* emu, void* widget, void* first, uintptr_t* b) { - #ifdef PREFER_CONVERT_VAARG +// #ifdef PREFER_CONVERT_VAARG +#if 1 CREATE_VALIST_FROM_VAARG(b, emu->scratch, 2); my->gtk_widget_style_get_valist(widget, first, VARARGS); - #else +#else // breaks DeltaPatcher void* prop = first; int i=0; do { @@ -786,7 +818,7 @@ EXPORT void my3_gtk_widget_style_get(x64emu_t* emu, void* widget, void* first, u my->gtk_widget_style_get_property(widget, prop, val); prop = (void*)getVArgs(emu, 2, b, i++); } while (prop); - #endif +#endif } EXPORT void my3_gtk_list_store_insert_with_values(x64emu_t* emu, void* list_store, void* iter, int position, uintptr_t* b) @@ -823,6 +855,64 @@ EXPORT void my3_gtk_list_box_set_header_func(x64emu_t* emu, void* box, void* f, my->gtk_list_box_set_header_func(box, findGtkListBoxUpdateHeaderFunc(f), data, findGDestroyNotifyFct(d)); } +EXPORT void my3_gtk_tree_model_get(x64emu_t* emu, void* tree_model, void* iter, uintptr_t* b) +{ +// #ifdef PREFER_CONVERT_VAARG +#if 1 + CREATE_VALIST_FROM_VAARG(b, emu->scratch, 2); + my->gtk_tree_model_get_valist(tree_model, iter, VARARGS); +#else + int i = 0; + int col = (int)getVArgs(emu, 2, b, i++); + while (col != -1) { + void* val = (void*)getVArgs(emu, 2, b, i++); + my->gtk_tree_model_get_value(tree_model, iter, col, val); + col = (int)getVArgs(emu, 2, b, i++); + } +#endif +} + +EXPORT void my3_gtk_tree_model_get_valist(x64emu_t* emu, void* tree_model, void* iter, x64_va_list_t V) +{ +#ifdef CONVERT_VALIST + CONVERT_VALIST(V); +#else + CREATE_VALIST_FROM_VALIST(V, emu->scratch); +#endif + my->gtk_tree_model_get_valist(tree_model, iter, VARARGS); +} + +EXPORT void my3_gtk_list_store_set(x64emu_t* emu, void* list_store, void* iter, uintptr_t* b) +{ +// #ifdef PREFER_CONVERT_VAARG +#if 1 + CREATE_VALIST_FROM_VAARG(b, emu->scratch, 2); + my->gtk_list_store_set_valist(list_store, iter, VARARGS); +#else + int i = 0; + int col = (int)getVArgs(emu, 2, b, i++); + while (col != -1) { + void* val = (void*)getVArgs(emu, 2, b, i++); + my->gtk_list_store_set_value(list_store, iter, col, val); + col = (int)getVArgs(emu, 2, b, i++); + } +#endif +} + +EXPORT void my3_gtk_list_store_set_valist(x64emu_t* emu, void* list_store, void* iter, x64_va_list_t V) +{ +#ifdef CONVERT_VALIST + CONVERT_VALIST(V); +#else + CREATE_VALIST_FROM_VALIST(V, emu->scratch); +#endif + my->gtk_list_store_set_valist(list_store, iter, VARARGS); +} + +EXPORT void my3_gtk_widget_class_bind_template_callback_full(x64emu_t* emu, void* widget_class, void* cb_name, void* cb) +{ + my->gtk_widget_class_bind_template_callback_full(widget_class, cb_name, findGCallbackFct(cb)); +} #define PRE_INIT \ if (BOX64ENV(nogtk)) return -2; diff --git a/src/wrapped/wrappedgtk3_private.h b/src/wrapped/wrappedgtk3_private.h index ac87f92d49..50b7a50904 100644 --- a/src/wrapped/wrappedgtk3_private.h +++ b/src/wrapped/wrappedgtk3_private.h @@ -1898,9 +1898,9 @@ GO(gtk_list_store_newv, pFip) GO(gtk_list_store_prepend, vFpp) GO(gtk_list_store_remove, iFpp) GO(gtk_list_store_reorder, vFpp) -//GOM(gtk_list_store_set, vFppV) +GOM(gtk_list_store_set, vFEppV) GO(gtk_list_store_set_column_types, vFpip) -//GOM(gtk_list_store_set_valist, vFppA) +GOM(gtk_list_store_set_valist, vFEppA) GO(gtk_list_store_set_value, vFppip) GO(gtk_list_store_set_valuesv, vFppppi) GO(gtk_list_store_swap, vFppp) @@ -3828,7 +3828,7 @@ GO(gtk_tree_model_filter_set_visible_column, vFpi) //GOM(gtk_tree_model_filter_set_visible_func, vFpppp) GO(gtk_tree_model_flags_get_type, LFv) //GOM(gtk_tree_model_foreach, vFEppp) -//GOM(gtk_tree_model_get, vFppV) +GOM(gtk_tree_model_get, vFppV) GO(gtk_tree_model_get_column_type, LFpi) GO(gtk_tree_model_get_flags, uFp) GO(gtk_tree_model_get_iter, iFppp) @@ -3838,7 +3838,7 @@ GO(gtk_tree_model_get_n_columns, iFp) GO(gtk_tree_model_get_path, pFpp) GO(gtk_tree_model_get_string_from_iter, pFpp) GO(gtk_tree_model_get_type, LFv) -//GOM(gtk_tree_model_get_valist, vFppA) +GOM(gtk_tree_model_get_valist, vFppA) GO(gtk_tree_model_get_value, vFppip) GO(gtk_tree_model_iter_children, iFppp) GO(gtk_tree_model_iter_has_child, iFpp) @@ -4167,7 +4167,7 @@ GO(gtk_widget_add_mnemonic_label, vFpp) GO(gtk_widget_can_activate_accel, iFpu) GO(gtk_widget_child_focus, iFpu) GO(gtk_widget_child_notify, vFpp) -//GOM(gtk_widget_class_bind_template_callback_full, vFppp) +GOM(gtk_widget_class_bind_template_callback_full, vFEppp) GO(gtk_widget_class_bind_template_child_full, vFppil) // need wrapping? GO(gtk_widget_class_find_style_property, pFpp) //GOM(gtk_widget_class_get_css_name, pFp) @@ -4179,8 +4179,8 @@ GO(gtk_widget_class_set_accessible_role, vFpu) GO(gtk_widget_class_set_accessible_type, vFpL) //GOM(gtk_widget_class_set_connect_func, vFEpppp) //GOM(gtk_widget_class_set_css_name, vFpp) -//GOM(gtk_widget_class_set_template, vFpp) -//GOM(gtk_widget_class_set_template_from_resource, vFpp) +GO(gtk_widget_class_set_template, vFpp) +GO(gtk_widget_class_set_template_from_resource, vFpp) GO(gtk_widget_compute_expand, iFpu) GO(gtk_widget_create_pango_context, pFp) GO(gtk_widget_create_pango_layout, pFpp) diff --git a/src/wrapped/wrappedlibc.c b/src/wrapped/wrappedlibc.c index 9c9372e1c3..40edfa4b47 100644 --- a/src/wrapped/wrappedlibc.c +++ b/src/wrapped/wrappedlibc.c @@ -1047,6 +1047,14 @@ EXPORT int my___isoc99_swscanf(x64emu_t* emu, void* stream, void* fmt, uint64_t* return vswscanf(stream, fmt, VARARGS); } +EXPORT int my___isoc23_swscanf(x64emu_t* emu, void* stream, void* fmt, uint64_t* b) +{ + myStackAlignScanfW(emu, (const char*)fmt, b, emu->scratch, 2); + PREPARE_VALIST; + + return vswscanf(stream, fmt, VARARGS); +} + EXPORT int my_vsnprintf(x64emu_t* emu, void* buff, size_t s, void * fmt, x64_va_list_t b) { (void)emu; #ifdef CONVERT_VALIST diff --git a/src/wrapped/wrappedlibc_private.h b/src/wrapped/wrappedlibc_private.h index eab517af70..51eac526c5 100644 --- a/src/wrapped/wrappedlibc_private.h +++ b/src/wrapped/wrappedlibc_private.h @@ -1038,6 +1038,7 @@ GO2(__isoc23_strtoul, LFppi, strtoul) GO2(__isoc23_strtoull, UFppi, strtoull) GO2(__isoc23_wcstol, lFppi, wcstol) GOM(__isoc99_fscanf, iFEppV) +GOM(__isoc23_swscanf, iFEppV) //GO(__isoc99_fwscanf, iFppV) GOM(__isoc99_scanf, iFEpV) GOM(__isoc99_sscanf, iFEppV) @@ -2420,6 +2421,7 @@ GOWD(wcstold_l, DFppp, wcstod_l) //GO(__wcstol_internal, //GO(__wcstol_l, GOW(wcstol_l, lFppip) +GO2(__isoc23_wcstol_l, lFppip, wcstol_l) GOW(wcstoll, IFppi) //GO(__wcstoll_internal, //GOW(__wcstoll_l, @@ -2435,6 +2437,7 @@ GO(wcstoul, LFppi) //GO(__wcstoul_internal, //GO(__wcstoul_l, GOW(wcstoul_l, LFppip) +GO2(__isoc23_wcstoul_l, LFppip, wcstoul_l) GOW(wcstoull, UFppi) //GO(__wcstoull_internal, //GOW(__wcstoull_l,