about summary refs log tree commit diff stats
path: root/src/wrapped/wrappedpulse.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/wrapped/wrappedpulse.c')
-rw-r--r--src/wrapped/wrappedpulse.c96
1 files changed, 52 insertions, 44 deletions
diff --git a/src/wrapped/wrappedpulse.c b/src/wrapped/wrappedpulse.c
index 02233aa0..f5ec5d43 100644
--- a/src/wrapped/wrappedpulse.c
+++ b/src/wrapped/wrappedpulse.c
@@ -49,7 +49,7 @@ typedef void (*vFipippV_t)(int, void*, int, void*, void*, va_list);
 #else
 typedef void (*vFipippV_t)(int, void*, int, void*, void*, void*);
 #endif
-    GO(pa_log_level_meta, vFipippV_t)           
+    GO(pa_log_level_meta, vFipippV_t)
 #endif
 
 #define ADDED_FUNCTIONS() \
@@ -91,7 +91,7 @@ GO(15)  \
 static uintptr_t my_free_fct_##A = 0;   \
 static void my_free_##A(void* data)     \
 {                                       \
-    RunFunction(my_context, my_free_fct_##A, 1, data);\
+    RunFunctionFmt(my_free_fct_##A, "p", data);\
 }
 SUPER()
 #undef GO
@@ -113,7 +113,7 @@ static void* findFreeFct(void* fct)
 static uintptr_t my_free_api_fct_##A = 0;   \
 static void my_free_api_##A(my_pa_mainloop_api_t* api, void* p, void* data)     \
 {                                       \
-    RunFunction(my_context, my_free_api_fct_##A, 3, api, p, data);\
+    RunFunctionFmt(my_free_api_fct_##A, "ppp", api, p, data);\
 }
 SUPER()
 #undef GO
@@ -136,7 +136,7 @@ static uintptr_t my_io_event_fct_##A = 0;   \
 static void my_io_event_##A(my_pa_mainloop_api_t* api, void* e, int fd, int events, void* data)     \
 {                                       \
     if(api==my_mainloop_orig) api=my_mainloop_ref;                  \
-    RunFunction(my_context, my_io_event_fct_##A, 5, api, e, fd, events, data);  \
+    RunFunctionFmt(my_io_event_fct_##A, "ppiip", api, e, fd, events, data);  \
 }
 SUPER()
 #undef GO
@@ -159,7 +159,7 @@ static uintptr_t my_time_event_fct_##A = 0;   \
 static void my_time_event_##A(my_pa_mainloop_api_t* api, void* e, void* tv, void* data)     \
 {                                       \
     if(api==my_mainloop_orig) api=my_mainloop_ref;                  \
-    RunFunction(my_context, my_time_event_fct_##A, 4, api, e, tv, data);  \
+    RunFunctionFmt(my_time_event_fct_##A, "pppp", api, e, tv, data);  \
 }
 SUPER()
 #undef GO
@@ -183,7 +183,7 @@ static uintptr_t my_defer_event_fct_##A = 0;   \
 static void my_defer_event_##A(my_pa_mainloop_api_t* api, void* e, void* data)     \
 {                                       \
     if(api==my_mainloop_orig) api=my_mainloop_ref;                  \
-    RunFunction(my_context, my_defer_event_fct_##A, 3, api, e, data);  \
+    RunFunctionFmt(my_defer_event_fct_##A, "ppp", api, e, data);  \
 }
 SUPER()
 #undef GO
@@ -206,7 +206,7 @@ static void* findDeferEventFct(void* fct)
 static uintptr_t my_poll_fct_##A = 0;   \
 static int my_poll_##A(void* ufds, unsigned long nfds, int timeout, void* data)         \
 {                                       \
-    return (int)RunFunction(my_context, my_poll_fct_##A, 4, ufds, nfds, timeout, data); \
+    return (int)RunFunctionFmt(my_poll_fct_##A, "pLip", ufds, nfds, timeout, data); \
 }
 SUPER()
 #undef GO
@@ -229,7 +229,7 @@ static uintptr_t my_signal_fct_##A = 0;   \
 static void my_signal_##A(my_pa_mainloop_api_t* api, void* e, int sig, void *data)  \
 {                                                                                   \
     if(api==my_mainloop_orig) api=my_mainloop_ref;                                  \
-    RunFunction(my_context, my_signal_fct_##A, 4, api, e, sig, data);               \
+    RunFunctionFmt(my_signal_fct_##A, "ppip", api, e, sig, data);               \
 }
 SUPER()
 #undef GO
@@ -252,7 +252,7 @@ static uintptr_t my_signal_destroy_fct_##A = 0;   \
 static void my_signal_destroy_##A(my_pa_mainloop_api_t* api, void* e, void *data)   \
 {                                                                                   \
     if(api==my_mainloop_orig) api=my_mainloop_ref;                                  \
-    RunFunction(my_context, my_signal_destroy_fct_##A, 3, api, e, data);            \
+    RunFunctionFmt(my_signal_destroy_fct_##A, "ppp", api, e, data);            \
 }
 SUPER()
 #undef GO
@@ -275,7 +275,7 @@ static void* find_signal_destroy_Fct(void* fct)
 static uintptr_t my_prefork_fct_##A = 0;            \
 static void my_prefork_##A()                        \
 {                                                   \
-    RunFunction(my_context, my_prefork_fct_##A, 0); \
+    RunFunctionFmt(my_prefork_fct_##A, ""); \
 }
 SUPER()
 #undef GO
@@ -297,7 +297,7 @@ static void* find_prefork_Fct(void* fct)
 static uintptr_t my_postfork_fct_##A = 0;           \
 static void my_postfork_##A()                       \
 {                                                   \
-    RunFunction(my_context, my_postfork_fct_##A, 0);\
+    RunFunctionFmt(my_postfork_fct_##A, "");\
 }
 SUPER()
 #undef GO
@@ -319,7 +319,7 @@ static void* find_postfork_Fct(void* fct)
 static uintptr_t my_atfork_fct_##A = 0;             \
 static void my_atfork_##A()                         \
 {                                                   \
-    RunFunction(my_context, my_atfork_fct_##A, 0);  \
+    RunFunctionFmt(my_atfork_fct_##A, "");  \
 }
 SUPER()
 #undef GO
@@ -342,7 +342,7 @@ static void* find_atfork_Fct(void* fct)
 static uintptr_t my_state_context_fct_##A = 0;                              \
 static void my_state_context_##A(void* context, void* data)                 \
 {                                                                           \
-    RunFunction(my_context, my_state_context_fct_##A, 2, context, data);    \
+    RunFunctionFmt(my_state_context_fct_##A, "pp", context, data);    \
 }
 SUPER()
 #undef GO
@@ -364,7 +364,7 @@ static void* find_state_context_Fct(void* fct)
 static uintptr_t my_notify_context_fct_##A = 0;                             \
 static void my_notify_context_##A(void* context, void* data)                \
 {                                                                           \
-    RunFunction(my_context, my_notify_context_fct_##A, 2, context, data);   \
+    RunFunctionFmt(my_notify_context_fct_##A, "pp", context, data);   \
 }
 SUPER()
 #undef GO
@@ -386,7 +386,7 @@ static void* find_notify_context_Fct(void* fct)
 static uintptr_t my_success_context_fct_##A = 0;                                    \
 static void my_success_context_##A(void* context, int success, void* data)          \
 {                                                                                   \
-    RunFunction(my_context, my_success_context_fct_##A, 3, context, success, data); \
+    RunFunctionFmt(my_success_context_fct_##A, "pip", context, success, data); \
 }
 SUPER()
 #undef GO
@@ -408,7 +408,7 @@ static void* find_success_context_Fct(void* fct)
 static uintptr_t my_event_context_fct_##A = 0;                                      \
 static void my_event_context_##A(void* context, void* name, void* p, void* data)    \
 {                                                                                   \
-    RunFunction(my_context, my_event_context_fct_##A, 4, context, name, p, data);   \
+    RunFunctionFmt(my_event_context_fct_##A, "pppp", context, name, p, data);   \
 }
 SUPER()
 #undef GO
@@ -430,7 +430,7 @@ static void* find_event_context_Fct(void* fct)
 static uintptr_t my_module_info_fct_##A = 0;                                    \
 static void my_module_info_##A(void* context, void* i, int eol, void* data)     \
 {                                                                               \
-    RunFunction(my_context, my_module_info_fct_##A, 4, context, i, eol, data);  \
+    RunFunctionFmt(my_module_info_fct_##A, "ppip", context, i, eol, data);  \
 }
 SUPER()
 #undef GO
@@ -452,7 +452,7 @@ static void* find_module_info_Fct(void* fct)
 static uintptr_t my_server_info_fct_##A = 0;                                \
 static void my_server_info_##A(void* context, void* i, void* data)          \
 {                                                                           \
-    RunFunction(my_context, my_server_info_fct_##A, 3, context, i, data);   \
+    RunFunctionFmt(my_server_info_fct_##A, "ppp", context, i, data);   \
 }
 SUPER()
 #undef GO
@@ -474,7 +474,7 @@ static void* find_server_info_Fct(void* fct)
 static uintptr_t my_client_info_fct_##A = 0;                                    \
 static void my_client_info_##A(void* context, void* i, int eol, void* data)     \
 {                                                                               \
-    RunFunction(my_context, my_client_info_fct_##A, 4, context, i, eol, data);  \
+    RunFunctionFmt(my_client_info_fct_##A, "ppip", context, i, eol, data);  \
 }
 SUPER()
 #undef GO
@@ -496,7 +496,7 @@ static void* find_client_info_Fct(void* fct)
 static uintptr_t my_context_index_fct_##A = 0;                                  \
 static void my_context_index_##A(void* context, uint32_t idx, void* data)       \
 {                                                                               \
-    RunFunction(my_context, my_context_index_fct_##A, 3, context, idx, data);   \
+    RunFunctionFmt(my_context_index_fct_##A, "pup", context, idx, data);   \
 }
 SUPER()
 #undef GO
@@ -518,7 +518,7 @@ static void* find_context_index_Fct(void* fct)
 static uintptr_t my_subscribe_context_fct_##A = 0;                                      \
 static void my_subscribe_context_##A(void* context, int evt, uint32_t idx, void* data)  \
 {                                                                                       \
-    RunFunction(my_context, my_subscribe_context_fct_##A, 4, context, evt, idx, data);  \
+    RunFunctionFmt(my_subscribe_context_fct_##A, "piup", context, evt, idx, data);  \
 }
 SUPER()
 #undef GO
@@ -541,7 +541,7 @@ static void* find_subscribe_context_Fct(void* fct)
 static uintptr_t my_stream_state_fct_##A = 0;                       \
 static void my_stream_state_##A(void* s, void* data)                \
 {                                                                   \
-    RunFunction(my_context, my_stream_state_fct_##A, 2, s, data);   \
+    RunFunctionFmt(my_stream_state_fct_##A, "pp", s, data);   \
 }
 SUPER()
 #undef GO
@@ -563,7 +563,7 @@ static void* find_stream_state_Fct(void* fct)
 static uintptr_t my_stream_success_fct_##A = 0;                                 \
 static void my_stream_success_##A(void* s, int success, void* data)             \
 {                                                                               \
-    RunFunction(my_context, my_stream_success_fct_##A, 3, s, success, data);    \
+    RunFunctionFmt(my_stream_success_fct_##A, "pip", s, success, data);    \
 }
 SUPER()
 #undef GO
@@ -585,7 +585,7 @@ static void* find_stream_success_Fct(void* fct)
 static uintptr_t my_stream_notify_fct_##A = 0;                      \
 static void my_stream_notify_##A(void* s, void* data)               \
 {                                                                   \
-    RunFunction(my_context, my_stream_notify_fct_##A, 2, s, data);  \
+    RunFunctionFmt(my_stream_notify_fct_##A, "pp", s, data);  \
 }
 SUPER()
 #undef GO
@@ -607,7 +607,7 @@ static void* find_stream_notify_Fct(void* fct)
 static uintptr_t my_stream_event_fct_##A = 0;                               \
 static void my_stream_event_##A(void* s, void* name, void* pl, void* data)  \
 {                                                                           \
-    RunFunction(my_context, my_stream_event_fct_##A, 4, s, name, pl, data); \
+    RunFunctionFmt(my_stream_event_fct_##A, "pppp", s, name, pl, data); \
 }
 SUPER()
 #undef GO
@@ -629,7 +629,7 @@ static void* find_stream_event_Fct(void* fct)
 static uintptr_t my_stream_request_fct_##A = 0;                             \
 static void my_stream_request_##A(void* s, size_t nbytes, void* data)       \
 {                                                                           \
-    RunFunction(my_context, my_stream_request_fct_##A, 3, s, nbytes, data); \
+    RunFunctionFmt(my_stream_request_fct_##A, "pLp", s, nbytes, data); \
 }
 SUPER()
 #undef GO
@@ -651,7 +651,7 @@ static void* find_stream_request_Fct(void* fct)
 static uintptr_t my_device_restore_read_device_formats_fct_##A = 0;                         \
 static void my_device_restore_read_device_formats_##A(void* a, void* b, int c, void* d)     \
 {                                                                                           \
-    RunFunction(my_context, my_device_restore_read_device_formats_fct_##A, 4, a, b, c, d);  \
+    RunFunctionFmt(my_device_restore_read_device_formats_fct_##A, "ppip", a, b, c, d);  \
 }
 SUPER()
 #undef GO
@@ -673,7 +673,7 @@ static void* find_device_restore_read_device_formats_Fct(void* fct)
 static uintptr_t my_card_info_fct_##A = 0;                         \
 static void my_card_info_##A(void* a, void* b, int c, void* d)     \
 {                                                                  \
-    RunFunction(my_context, my_card_info_fct_##A, 4, a, b, c, d);  \
+    RunFunctionFmt(my_card_info_fct_##A, "ppip", a, b, c, d);  \
 }
 SUPER()
 #undef GO
@@ -695,7 +695,7 @@ static void* find_card_info_Fct(void* fct)
 static uintptr_t my_source_output_info_fct_##A = 0;                         \
 static void my_source_output_info_##A(void* a, void* b, int c, void* d)     \
 {                                                                  \
-    RunFunction(my_context, my_source_output_info_fct_##A, 4, a, b, c, d);  \
+    RunFunctionFmt(my_source_output_info_fct_##A, "ppip", a, b, c, d);  \
 }
 SUPER()
 #undef GO
@@ -717,7 +717,7 @@ static void* find_source_output_info_Fct(void* fct)
 static uintptr_t my_device_restore_subscribe_fct_##A = 0;                           \
 static void my_device_restore_subscribe_##A(void* a, int b, uint32_t c, void* d)    \
 {                                                                                   \
-    RunFunction(my_context, my_device_restore_subscribe_fct_##A, 4, a, b, c, d);    \
+    RunFunctionFmt(my_device_restore_subscribe_fct_##A, "piup", a, b, c, d);    \
 }
 SUPER()
 #undef GO
@@ -830,7 +830,7 @@ static void* my_io_new(void* api, int fd, int events, void* cb, void *userdata)
     if(cb)
         b = AddCheckBridge(bridge, vFppiip, cb, 0, NULL);
     if(api==my_mainloop_orig) api=my_mainloop_ref;    // need emulated version
-    return (void*)RunFunction(my_context, (uintptr_t)my_mainloop_ref->io_new, 5, api, fd, events, b, userdata);
+    return (void*)RunFunctionFmt((uintptr_t)my_mainloop_ref->io_new, "piipp", api, fd, events, b, userdata);
 }
 static void my_io_enable(void* e, int events)
 {
@@ -839,7 +839,7 @@ static void my_io_enable(void* e, int events)
     if(fnc)
         return ((vFpi_t)fnc)(e, events);
 
-    RunFunction(my_context, (uintptr_t)my_mainloop_ref->io_enable, 2, e, events);
+    RunFunctionFmt((uintptr_t)my_mainloop_ref->io_enable, "pi", e, events);
 }
 static void my_io_free(void* e)
 {
@@ -848,7 +848,7 @@ static void my_io_free(void* e)
     if(fnc)
         return ((vFp_t)fnc)(e);
 
-    RunFunction(my_context, (uintptr_t)my_mainloop_ref->io_free, 1, e);
+    RunFunctionFmt((uintptr_t)my_mainloop_ref->io_free, "p", e);
 }
 static void my_io_set_destroy(void* e, void* cb)
 {
@@ -864,7 +864,7 @@ static void my_io_set_destroy(void* e, void* cb)
         if(!b)
             b = AddBridge(bridge, vFppp, cb, 0, NULL);
     }
-    RunFunction(my_context, (uintptr_t)my_mainloop_ref->io_set_destroy, 2, e, b);
+    RunFunctionFmt((uintptr_t)my_mainloop_ref->io_set_destroy, "pp", e, b);
 }
 
 static void* my_time_new(void* api, void* tv, void* cb, void* data)
@@ -882,7 +882,7 @@ static void* my_time_new(void* api, void* tv, void* cb, void* data)
     if(cb)
         b = AddCheckBridge(bridge, vFpppp, cb, 0, NULL);
     if(api==my_mainloop_orig) api=my_mainloop_ref;    // need emulated version
-    return (void*)RunFunction(my_context, (uintptr_t)my_mainloop_ref->time_new, 4, api, tv, b, data);
+    return (void*)RunFunctionFmt((uintptr_t)my_mainloop_ref->time_new, "pppp", api, tv, b, data);
 }
 static void my_time_restart(void* e, void* tv)
 {
@@ -891,7 +891,7 @@ static void my_time_restart(void* e, void* tv)
     if(fnc)
         return ((vFpp_t)fnc)(e, tv);
 
-    RunFunction(my_context, (uintptr_t)my_mainloop_ref->time_restart, 2, e, tv);
+    RunFunctionFmt((uintptr_t)my_mainloop_ref->time_restart, "pp", e, tv);
 }
 static void my_time_free(void* e)
 {
@@ -900,7 +900,7 @@ static void my_time_free(void* e)
     if(fnc)
         return ((vFp_t)fnc)(e);
 
-    RunFunction(my_context, (uintptr_t)my_mainloop_ref->time_free, 1, e);
+    RunFunctionFmt((uintptr_t)my_mainloop_ref->time_free, "p", e);
 }
 static void my_time_set_destroy(void* e, void* cb)
 {
@@ -913,13 +913,21 @@ static void my_time_set_destroy(void* e, void* cb)
     uintptr_t b = 0;
     if(cb)
             b = AddCheckBridge(bridge, vFppp, cb, 0, NULL);
-    RunFunction(my_context, (uintptr_t)my_mainloop_ref->time_set_destroy, 2, e, b);
+    RunFunctionFmt((uintptr_t)my_mainloop_ref->time_set_destroy, "pp", e, b);
 }
 
 static void* my_defer_new(void* api, void* cb, void* data)
 {
     uintptr_t b = (uintptr_t)cb;
-    void* fnc = GetNativeFnc((uintptr_t)my_mainloop_ref->defer_new);
+    static void* old_defer_new = NULL;
+    static void* old_fnc = NULL;
+    void* fnc = NULL;
+    if(old_defer_new == my_mainloop_ref->defer_new)
+        fnc = old_fnc;
+    else {
+        old_fnc = fnc = GetNativeFnc((uintptr_t)my_mainloop_ref->defer_new);
+        old_defer_new = my_mainloop_ref->defer_new;
+    }
     if(fnc) {
         if(api==my_mainloop_ref) api=my_mainloop_orig;    // need native version
         if(fnc==native_defer_new) fnc=my_mainloop_native.defer_new;
@@ -934,7 +942,7 @@ static void* my_defer_new(void* api, void* cb, void* data)
             b = AddBridge(bridge, vFppp, cb, 0, NULL);
     }
     if(api==my_mainloop_orig) api=my_mainloop_ref;    // need emulated version
-    return (void*)RunFunction(my_context, (uintptr_t)my_mainloop_ref->defer_new, 3, api, b, data);
+    return (void*)RunFunctionFmt((uintptr_t)my_mainloop_ref->defer_new, "ppp", api, b, data);
 }
 static void my_defer_enable(void* e, int b)
 {
@@ -943,7 +951,7 @@ static void my_defer_enable(void* e, int b)
     if(fnc)
         return ((vFpi_t)fnc)(e, b);
 
-    RunFunction(my_context, (uintptr_t)my_mainloop_ref->defer_enable, 2, e, b);
+    RunFunctionFmt((uintptr_t)my_mainloop_ref->defer_enable, "pi", e, b);
 }
 static void my_defer_free(void* e)
 {
@@ -952,7 +960,7 @@ static void my_defer_free(void* e)
     if(fnc)
         return ((vFp_t)fnc)(e);
 
-    RunFunction(my_context, (uintptr_t)my_mainloop_ref->defer_free, 1, e);
+    RunFunctionFmt((uintptr_t)my_mainloop_ref->defer_free, "p", e);
 }
 static void my_defer_set_destroy(void* e, void* cb)
 {
@@ -965,7 +973,7 @@ static void my_defer_set_destroy(void* e, void* cb)
     uintptr_t b = 0;
     if(cb)
         b = AddCheckBridge(bridge, vFppp, cb, 0, NULL);
-    RunFunction(my_context, (uintptr_t)my_mainloop_ref->defer_set_destroy, 2, e, b);
+    RunFunctionFmt((uintptr_t)my_mainloop_ref->defer_set_destroy, "pp", e, b);
 }
 
 static void my_quit(void* api, int retval)
@@ -978,7 +986,7 @@ static void my_quit(void* api, int retval)
     }
 
     if(api==my_mainloop_orig) api=my_mainloop_ref;    // need emulated version
-    RunFunction(my_context, (uintptr_t)my_mainloop_ref->quit, 2, api, retval);
+    RunFunctionFmt((uintptr_t)my_mainloop_ref->quit, "pi", api, retval);
 }
 
 static void bridgeMainloopAPI(bridge_t* bridge, my_pa_mainloop_api_t* api)