Added an assert log category, and NSLog support on Mac OS X and iOS
authorSam Lantinga <slouken@libsdl.org>
Tue, 30 Oct 2012 12:30:02 -0700
changeset 6616 4f272256d172
parent 6615 d7a463bde4d7
child 6617 3a92812e0c91
Added an assert log category, and NSLog support on Mac OS X and iOS
include/SDL_log.h
src/SDL_log.c
src/video/cocoa/SDL_cocoavideo.m
src/video/uikit/SDL_uikitvideo.m
--- a/include/SDL_log.h	Tue Oct 30 12:21:15 2012 -0700
+++ b/include/SDL_log.h	Tue Oct 30 12:30:02 2012 -0700
@@ -59,12 +59,14 @@
  *  \brief The predefined log categories
  *
  *  By default the application category is enabled at the INFO level,
- *  and all other categories are enabled at the CRITICAL level.
+ *  the assert category is enabled at the WARN level, and all other
+ *  categories are enabled at the CRITICAL level.
  */
 enum
 {
     SDL_LOG_CATEGORY_APPLICATION,
     SDL_LOG_CATEGORY_ERROR,
+    SDL_LOG_CATEGORY_ASSERT,
     SDL_LOG_CATEGORY_SYSTEM,
     SDL_LOG_CATEGORY_AUDIO,
     SDL_LOG_CATEGORY_VIDEO,
--- a/src/SDL_log.c	Tue Oct 30 12:21:15 2012 -0700
+++ b/src/SDL_log.c	Tue Oct 30 12:30:02 2012 -0700
@@ -35,6 +35,7 @@
 #endif
 
 #define DEFAULT_PRIORITY                SDL_LOG_PRIORITY_CRITICAL
+#define DEFAULT_ASSERT_PRIORITY         SDL_LOG_PRIORITY_WARN
 #define DEFAULT_APPLICATION_PRIORITY    SDL_LOG_PRIORITY_INFO
 
 typedef struct SDL_LogLevel
@@ -50,8 +51,9 @@
                           const char *message);
 
 static SDL_LogLevel *SDL_loglevels;
+static SDL_LogPriority SDL_default_priority = DEFAULT_PRIORITY;
+static SDL_LogPriority SDL_assert_priority = DEFAULT_ASSERT_PRIORITY;
 static SDL_LogPriority SDL_application_priority = DEFAULT_APPLICATION_PRIORITY;
-static SDL_LogPriority SDL_default_priority = DEFAULT_PRIORITY;
 static SDL_LogOutputFunction SDL_log_function = SDL_LogOutput;
 static void *SDL_log_userdata = NULL;
 
@@ -95,7 +97,9 @@
     for (entry = SDL_loglevels; entry; entry = entry->next) {
         entry->priority = priority;
     }
-    SDL_application_priority = SDL_default_priority = priority;
+    SDL_default_priority = priority;
+    SDL_assert_priority = priority;
+    SDL_application_priority = priority;
 }
 
 void
@@ -133,6 +137,8 @@
 
     if (category == SDL_LOG_CATEGORY_APPLICATION) {
         return SDL_application_priority;
+    } else if (category == SDL_LOG_CATEGORY_ASSERT) {
+        return SDL_assert_priority;
     } else {
         return SDL_default_priority;
     }
@@ -149,8 +155,9 @@
         SDL_free(entry);
     }
 
+    SDL_default_priority = DEFAULT_PRIORITY;
+    SDL_assert_priority = DEFAULT_ASSERT_PRIORITY;
     SDL_application_priority = DEFAULT_APPLICATION_PRIORITY;
-    SDL_default_priority = DEFAULT_PRIORITY;
 }
 
 void
@@ -302,6 +309,19 @@
         SDL_snprintf(tag, SDL_arraysize(tag), "SDL/%s", GetCategoryPrefix(category));
         __android_log_write(SDL_android_priority[priority], tag, message);
     }
+#elif defined(__APPLE__)
+    extern void SDL_NSLog(const char *text);
+    {
+        char *text;
+
+        text = SDL_stack_alloc(char, SDL_MAX_LOG_MESSAGE);
+        if (text) {
+            SDL_snprintf(text, SDL_MAX_LOG_MESSAGE, "%s: %s", SDL_priority_prefixes[priority], message);
+            SDL_NSLog(text);
+            SDL_stack_free(text);
+            return;
+        }
+    }
 #endif
 #if HAVE_STDIO_H
     fprintf(stderr, "%s: %s\n", SDL_priority_prefixes[priority], message);
--- a/src/video/cocoa/SDL_cocoavideo.m	Tue Oct 30 12:21:15 2012 -0700
+++ b/src/video/cocoa/SDL_cocoavideo.m	Tue Oct 30 12:30:02 2012 -0700
@@ -218,6 +218,22 @@
 }
 
 /*
+ * Mac OS X log support.
+ *
+ * This doesn't really have aything to do with the interfaces of the SDL video
+ *  subsystem, but we need to stuff this into an Objective-C source code file.
+ */
+
+void SDL_NSLog(const char *text)
+{
+    NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init];
+
+    NSLog(@"%@", [[NSString alloc] initWithUTF8String:text]);
+
+    [pool release];
+}
+
+/*
  * Mac OS X assertion support.
  *
  * This doesn't really have aything to do with the interfaces of the SDL video
--- a/src/video/uikit/SDL_uikitvideo.m	Tue Oct 30 12:21:15 2012 -0700
+++ b/src/video/uikit/SDL_uikitvideo.m	Tue Oct 30 12:30:02 2012 -0700
@@ -129,6 +129,22 @@
     UIKit_QuitModes(_this);
 }
 
+/*
+ * iOS log support.
+ *
+ * This doesn't really have aything to do with the interfaces of the SDL video
+ *  subsystem, but we need to stuff this into an Objective-C source code file.
+ */
+
+void SDL_NSLog(const char *text)
+{
+    NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init];
+
+    NSLog(@"%@", [[NSString alloc] initWithUTF8String:text]);
+
+    [pool release];
+}
+
 #endif /* SDL_VIDEO_DRIVER_UIKIT */
 
 /* vi: set ts=4 sw=4 expandtab: */