about summary refs log tree commit diff stats
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/wrapped/generated/functions_list.txt2
-rw-r--r--src/wrapped/generated/wrappeddbustypes.h2
-rw-r--r--src/wrapped/wrappeddbus.c43
-rw-r--r--src/wrapped/wrappeddbus_private.h6
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)