Merge pull request #409 from Alkarex/patch-1
[mono.git] / eglib / src / goutput.c
index bce2f0a159f1ea9a9fc06819d41b16388aa6e628..69122ddda62b8fe188ccc3f6473e8d68a1a37683 100644 (file)
@@ -5,6 +5,8 @@
  *   Miguel de Icaza (miguel@novell.com)
  *
  * (C) 2006 Novell, Inc.
+ * Copyright 2011 Xamarin Inc.
+ *
  * Permission is hereby granted, free of charge, to any person obtaining
  * a copy of this software and associated documentation files (the
  * "Software"), to deal in the Software without restriction, including
@@ -24,6 +26,7 @@
  * OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
  * WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
  */
+#include <config.h>
 #include <stdio.h>
 #include <stdlib.h>
 #include <glib.h>
@@ -55,6 +58,30 @@ out_vfprintf (FILE *ignore, const gchar *format, va_list args)
        /* TODO: provide a proper app name */
        __android_log_vprint (ANDROID_LOG_ERROR, "mono", format, args);
 }
+#elif MONOTOUCH && defined(__arm__)
+#include <asl.h>
+
+static int
+to_asl_priority (GLogLevelFlags log_level)
+{
+       switch (log_level & G_LOG_LEVEL_MASK)
+       {
+               case G_LOG_LEVEL_ERROR:     return ASL_LEVEL_CRIT;
+               case G_LOG_LEVEL_CRITICAL:  return ASL_LEVEL_ERR;
+               case G_LOG_LEVEL_WARNING:   return ASL_LEVEL_WARNING;
+               case G_LOG_LEVEL_MESSAGE:   return ASL_LEVEL_NOTICE;
+               case G_LOG_LEVEL_INFO:      return ASL_LEVEL_INFO;
+               case G_LOG_LEVEL_DEBUG:     return ASL_LEVEL_DEBUG;
+       }
+       return ASL_LEVEL_ERR;
+}
+
+static void
+out_vfprintf (FILE *ignore, const gchar *format, va_list args)
+{
+       asl_vlog (NULL, NULL, ASL_LEVEL_WARNING, format, args);
+}
+
 #else
 static void 
 out_vfprintf (FILE *file, const gchar *format, va_list args)
@@ -111,26 +138,27 @@ g_log_set_fatal_mask (const gchar *log_domain, GLogLevelFlags fatal_mask)
 void
 g_logv (const gchar *log_domain, GLogLevelFlags log_level, const gchar *format, va_list args)
 {
-       char *msg;
-       
-       vasprintf (&msg, format, args);
 #if PLATFORM_ANDROID
-       __android_log_print (to_android_priority (log_level), 
-               /* TODO: provide a proper app name */
-               "mono", "%s%s%s",
-               log_domain != NULL ? log_domain : "",
-               log_domain != NULL ? ": " : "",
-               msg);
+       __android_log_vprint (to_android_priority (log_level), log_domain, format, args);
+#elif MONOTOUCH && defined(__arm__)
+       asl_vlog (NULL, NULL, to_asl_priority (log_level), format, args);
 #else
+       char *msg;
+       
+       if (vasprintf (&msg, format, args) < 0)
+               return;
+       
        printf ("%s%s%s\n",
                log_domain != NULL ? log_domain : "",
                log_domain != NULL ? ": " : "",
                msg);
-#endif
        free (msg);
        if (log_level & fatal){
                fflush (stdout);
                fflush (stderr);
+       }
+#endif
+       if (log_level & fatal){
                abort ();
        }
 }