@@ -36,6 +36,8 @@ static GLogLevelFlags fatal = G_LOG_LEVEL_ERROR;
36
36
static GLogFunc default_log_func ;
37
37
static gpointer default_log_func_user_data ;
38
38
static GPrintFunc stdout_handler , stderr_handler ;
39
+ typedef void (* vprintf_func )(const char * msg , va_list args );
40
+ static vprintf_func our_vprintf = vprintf ;
39
41
40
42
static void default_stdout_handler (const gchar * string );
41
43
static void default_stderr_handler (const gchar * string );
@@ -274,3 +276,31 @@ g_set_printerr_handler (GPrintFunc func)
274
276
return old ;
275
277
}
276
278
279
+ void wrap_our_vprintf (const gchar * format , ...)
280
+ {
281
+ va_list args ;
282
+ va_start (args , format );
283
+ our_vprintf (format , args );
284
+ va_end (args );
285
+ }
286
+
287
+ static void
288
+ unity_vprintf_GPrintFunc_adapter (const gchar * string )
289
+ {
290
+ wrap_our_vprintf ("%s" , string );
291
+ }
292
+
293
+ static void
294
+ unity_vprintf_GLogFunc_adapter (const gchar * log_domain , GLogLevelFlags log_level , const gchar * message , gpointer user_data )
295
+ {
296
+ wrap_our_vprintf ("%s" , message );
297
+ }
298
+
299
+ // Redirect all stdout output to unity vprintf function
300
+ void set_vprintf_func (vprintf_func func )
301
+ {
302
+ our_vprintf = func ;
303
+ g_set_print_handler (unity_vprintf_GPrintFunc_adapter );
304
+ g_log_set_default_handler (unity_vprintf_GLogFunc_adapter , NULL );
305
+ }
306
+
0 commit comments