From: Bernhard Kölbl bkoelbl@codeweavers.com
Signed-off-by: Bernhard Kölbl bkoelbl@codeweavers.com --- dlls/mscoree/metahost.c | 7 +++++++ dlls/mscoree/mscoree_main.c | 14 ++++++++++++++ dlls/mscoree/mscoree_private.h | 2 ++ 3 files changed, 23 insertions(+)
diff --git a/dlls/mscoree/metahost.c b/dlls/mscoree/metahost.c index f57fa065e08..e1dd00656e9 100644 --- a/dlls/mscoree/metahost.c +++ b/dlls/mscoree/metahost.c @@ -129,6 +129,7 @@ MonoThread* (CDECL *mono_thread_attach)(MonoDomain *domain); void (CDECL *mono_thread_manage)(void); void (CDECL *mono_trace_set_print_handler)(MonoPrintCallback callback); void (CDECL *mono_trace_set_printerr_handler)(MonoPrintCallback callback); +void (CDECL *mono_trace_set_log_handler)(MonoLogCallback callback, void *user_data); static MonoAssembly* (CDECL *wine_mono_assembly_load_from_gac)(MonoAssemblyName *aname, MonoImageOpenStatus *status, int refonly); static void (CDECL *wine_mono_install_assembly_preload_hook)(WineMonoAssemblyPreLoadFunc func, void *user_data); static void (CDECL *wine_mono_install_assembly_preload_hook_v2)(WineMonoAssemblyPreLoadFunc func, void *user_data); @@ -155,6 +156,10 @@ static void CDECL set_print_handler_dummy(MonoPrintCallback callback) { }
+static void CDECL set_log_handler_dummy (MonoLogCallback callback, void *user_data) +{ +} + static HRESULT load_mono(LPCWSTR mono_path) { static const WCHAR lib[] = {'\','l','i','b',0}; @@ -253,6 +258,7 @@ static HRESULT load_mono(LPCWSTR mono_path) LOAD_OPT_MONO_FUNCTION(mono_set_crash_chaining, set_crash_chaining_dummy); LOAD_OPT_MONO_FUNCTION(mono_trace_set_print_handler, set_print_handler_dummy); LOAD_OPT_MONO_FUNCTION(mono_trace_set_printerr_handler, set_print_handler_dummy); + LOAD_OPT_MONO_FUNCTION(mono_trace_set_log_handler, set_log_handler_dummy); LOAD_OPT_MONO_FUNCTION(wine_mono_assembly_load_from_gac, NULL); LOAD_OPT_MONO_FUNCTION(wine_mono_install_assembly_preload_hook, NULL); LOAD_OPT_MONO_FUNCTION(wine_mono_install_assembly_preload_hook_v2, NULL); @@ -281,6 +287,7 @@ static HRESULT load_mono(LPCWSTR mono_path)
mono_trace_set_print_handler(mono_print_handler_fn); mono_trace_set_printerr_handler(mono_print_handler_fn); + mono_trace_set_log_handler(mono_log_handler_fn, NULL);
mono_set_dirs(mono_lib_path_a, mono_etc_path_a);
diff --git a/dlls/mscoree/mscoree_main.c b/dlls/mscoree/mscoree_main.c index a1bc8883787..2b9f78a3955 100644 --- a/dlls/mscoree/mscoree_main.c +++ b/dlls/mscoree/mscoree_main.c @@ -262,6 +262,20 @@ void CDECL mono_print_handler_fn(const char *string, INT is_stdout) } }
+void CDECL mono_log_handler_fn(const char *log_domain, const char *log_level, const char *message, INT fatal, void *user_data) +{ + SIZE_T len = (log_domain ? strlen(log_domain) + 2 : 0) + strlen(message) + strlen("\n") + 1; + char *msg = calloc(len, sizeof(char)); + + if (msg) + { + sprintf(msg, "%s%s%s\n", log_domain ? log_domain : "", log_domain ? ": " : "", message); + mono_print_handler_fn(msg, 0); + } + + free(msg); +} + BOOL WINAPI DllMain(HINSTANCE hinstDLL, DWORD fdwReason, LPVOID lpvReserved) { TRACE("(%p, %ld, %p)\n", hinstDLL, fdwReason, lpvReserved); diff --git a/dlls/mscoree/mscoree_private.h b/dlls/mscoree/mscoree_private.h index cec63d7bac7..6dff5f61bbb 100644 --- a/dlls/mscoree/mscoree_private.h +++ b/dlls/mscoree/mscoree_private.h @@ -153,6 +153,7 @@ typedef MonoAssembly* (CDECL *WineMonoAssemblyPreLoadFunc)(MonoAssemblyName *ana typedef void (CDECL *MonoProfileFunc)(MonoProfiler *prof);
typedef void (CDECL *MonoPrintCallback) (const char *string, INT is_stdout); +typedef void (*MonoLogCallback) (const char *log_domain, const char *log_level, const char *message, INT fatal, void *user_data);
typedef enum { MONO_AOT_MODE_NONE, @@ -227,5 +228,6 @@ extern void runtimehost_init(void); extern void runtimehost_uninit(void);
extern void CDECL mono_print_handler_fn(const char *string, INT is_stdout); +extern void CDECL mono_log_handler_fn(const char *log_domain, const char *log_level, const char *message, INT fatal, void *user_data);
#endif /* __MSCOREE_PRIVATE__ */