diff options
Diffstat (limited to 'src')
| -rw-r--r-- | src/wrapped/generated/functions_list.txt | 2 | ||||
| -rw-r--r-- | src/wrapped/generated/wrappeddbustypes.h | 2 | ||||
| -rw-r--r-- | src/wrapped/wrappeddbus.c | 43 | ||||
| -rw-r--r-- | src/wrapped/wrappeddbus_private.h | 6 |
4 files changed, 50 insertions, 3 deletions
diff --git a/src/wrapped/generated/functions_list.txt b/src/wrapped/generated/functions_list.txt index 2287f965..fad50fef 100644 --- a/src/wrapped/generated/functions_list.txt +++ b/src/wrapped/generated/functions_list.txt @@ -3671,6 +3671,7 @@ wrappeddbus: - dbus_message_append_args_valist - vFpppp: - dbus_connection_set_dispatch_status_function + - dbus_connection_set_unix_user_function - dbus_connection_set_wakeup_main_function - dbus_server_set_new_connection_function - iFpipp: @@ -3685,6 +3686,7 @@ wrappeddbus: - iFpppp: - dbus_connection_add_filter - dbus_connection_register_fallback + - dbus_connection_register_object_path - dbus_pending_call_set_notify - iFppppp: - dbus_connection_try_register_fallback diff --git a/src/wrapped/generated/wrappeddbustypes.h b/src/wrapped/generated/wrappeddbustypes.h index 74673383..228980e8 100644 --- a/src/wrapped/generated/wrappeddbustypes.h +++ b/src/wrapped/generated/wrappeddbustypes.h @@ -29,6 +29,7 @@ typedef int32_t (*iFpppppp_t)(void*, void*, void*, void*, void*, void*); GO(dbus_message_append_args, iFpiV_t) \ GO(dbus_message_append_args_valist, iFpiA_t) \ GO(dbus_connection_set_dispatch_status_function, vFpppp_t) \ + GO(dbus_connection_set_unix_user_function, vFpppp_t) \ GO(dbus_connection_set_wakeup_main_function, vFpppp_t) \ GO(dbus_server_set_new_connection_function, vFpppp_t) \ GO(dbus_connection_set_data, iFpipp_t) \ @@ -39,6 +40,7 @@ typedef int32_t (*iFpppppp_t)(void*, void*, void*, void*, void*, void*); GO(dbus_message_get_args_valist, iFppiA_t) \ GO(dbus_connection_add_filter, iFpppp_t) \ GO(dbus_connection_register_fallback, iFpppp_t) \ + GO(dbus_connection_register_object_path, iFpppp_t) \ GO(dbus_pending_call_set_notify, iFpppp_t) \ GO(dbus_connection_try_register_fallback, iFppppp_t) \ GO(dbus_connection_try_register_object_path, iFppppp_t) \ diff --git a/src/wrapped/wrappeddbus.c b/src/wrapped/wrappeddbus.c index fe2dd6c6..d60c2821 100644 --- a/src/wrapped/wrappeddbus.c +++ b/src/wrapped/wrappeddbus.c @@ -372,6 +372,28 @@ static void* findDBusNewConnectionFunctionFct(void* fct) printf_log(LOG_NONE, "Warning, no more slot for dbus DBusNewConnectionFunction callback\n"); return NULL; } +// DBusAllowUnixUserFunction +#define GO(A) \ +static uintptr_t my_DBusAllowUnixUserFunction_fct_##A = 0; \ +static int my_DBusAllowUnixUserFunction_##A(void* a, unsigned long b, void* c) \ +{ \ + return RunFunctionFmt(my_DBusAllowUnixUserFunction_fct_##A, "pLp", a, b, c); \ +} +SUPER() +#undef GO +static void* find_DBusAllowUnixUserFunction_Fct(void* fct) +{ + if(!fct) return fct; + if(GetNativeFnc((uintptr_t)fct)) return GetNativeFnc((uintptr_t)fct); + #define GO(A) if(my_DBusAllowUnixUserFunction_fct_##A == (uintptr_t)fct) return my_DBusAllowUnixUserFunction_##A; + SUPER() + #undef GO + #define GO(A) if(my_DBusAllowUnixUserFunction_fct_##A == 0) {my_DBusAllowUnixUserFunction_fct_##A = (uintptr_t)fct; return my_DBusAllowUnixUserFunction_##A; } + SUPER() + #undef GO + printf_log(LOG_NONE, "Warning, no more slot for libdbus-1.so DBusAllowUnixUserFunction callback\n"); + return NULL; +} #undef SUPER @@ -576,6 +598,22 @@ EXPORT int my_dbus_connection_register_fallback(x64emu_t* emu, void* connection, return my->dbus_connection_register_fallback(connection, path, vtable?&vt:NULL, data); } +EXPORT int my_dbus_connection_register_object_path(x64emu_t* emu, void* connection, void* path, my_DBusObjectPathVTable_t* vtable, void* data) +{ + (void)emu; + my_DBusObjectPathVTable_t vt = {0}; + if(vtable) { + vt.unregister_function = findDBusObjectPathUnregisterFunctionFct(vtable->unregister_function); + vt.message_function = findDBusObjectPathMessageFunctionFct(vtable->message_function); + vt.pad1 = finddbus_internal_padFct(vtable->pad1); + vt.pad2 = finddbus_internal_padFct(vtable->pad2); + vt.pad3 = finddbus_internal_padFct(vtable->pad3); + vt.pad4 = finddbus_internal_padFct(vtable->pad4); + } + + return my->dbus_connection_register_object_path(connection, path, vtable?&vt:NULL, data); +} + EXPORT int my_dbus_connection_set_data(x64emu_t* emu, void* connection, int slot, void* data, void* free_func) { (void)emu; @@ -624,4 +662,9 @@ EXPORT int my_dbus_server_set_data(x64emu_t* emu, void* server, int slot, void* return my->dbus_server_set_data(server, slot, data, find_DBusFreeFunction_Fct(d)); } +EXPORT void my_dbus_connection_set_unix_user_function(x64emu_t* emu, void* conn, void* f, void* data, void* fr) +{ + my->dbus_connection_set_unix_user_function(conn, find_DBusAllowUnixUserFunction_Fct(f), data, find_DBusFreeFunction_Fct(fr)); +} + #include "wrappedlib_init.h" diff --git a/src/wrapped/wrappeddbus_private.h b/src/wrapped/wrappeddbus_private.h index c11c842b..145a7d21 100644 --- a/src/wrapped/wrappeddbus_private.h +++ b/src/wrapped/wrappeddbus_private.h @@ -55,7 +55,7 @@ GO(dbus_connection_read_write, iFpi) GO(dbus_connection_read_write_dispatch, iFpi) GO(dbus_connection_ref, pFp) GOM(dbus_connection_register_fallback, iFEpppp) -//GO(dbus_connection_register_object_path, +GOM(dbus_connection_register_object_path, iFEpppp) GOM(dbus_connection_remove_filter, vFEppp) GO(dbus_connection_return_message, vFpp) GO(dbus_connection_send, iFppp) @@ -71,7 +71,7 @@ GO(dbus_connection_set_max_message_size, vFpl) GO(dbus_connection_set_max_received_size, vFpl) GO(dbus_connection_set_route_peer_messages, vFpi) GOM(dbus_connection_set_timeout_functions, iFEpppppp) -//GO(dbus_connection_set_unix_user_function, +GOM(dbus_connection_set_unix_user_function, vFEpppp) GOM(dbus_connection_set_wakeup_main_function, vFEpppp) GOM(dbus_connection_set_watch_functions, iFEpppppp) //GO(dbus_connection_set_windows_user_function, @@ -184,7 +184,7 @@ GO(dbus_server_allocate_data_slot, iFp) GO(dbus_server_disconnect, vFp) GO(dbus_server_free_data_slot, vFp) GO(dbus_server_get_address, pFp) -//GO(dbus_server_get_data, +GO(dbus_server_get_data, pFpi) //GO(dbus_server_get_id, GO(dbus_server_get_is_connected, iFp) GO(dbus_server_listen, pFpp) |