From 10d7dec989b18599b8f9bbc6f66f11fddfca6209 Mon Sep 17 00:00:00 2001 From: Sam Lantinga Date: Tue, 30 Oct 2012 12:30:02 -0700 Subject: [PATCH] Added an assert log category, and NSLog support on Mac OS X and iOS --- include/SDL_log.h | 4 +++- src/SDL_log.c | 26 +++++++++++++++++++++++--- src/video/cocoa/SDL_cocoavideo.m | 16 ++++++++++++++++ src/video/uikit/SDL_uikitvideo.m | 16 ++++++++++++++++ 4 files changed, 58 insertions(+), 4 deletions(-) diff --git a/include/SDL_log.h b/include/SDL_log.h index 9f7e8b4f0..c87e9dd07 100644 --- a/include/SDL_log.h +++ b/include/SDL_log.h @@ -59,12 +59,14 @@ extern "C" { * \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, diff --git a/src/SDL_log.c b/src/SDL_log.c index d38be9f93..109e5a848 100644 --- a/src/SDL_log.c +++ b/src/SDL_log.c @@ -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 @@ static void SDL_LogOutput(void *userdata, const char *message); static SDL_LogLevel *SDL_loglevels; -static SDL_LogPriority SDL_application_priority = DEFAULT_APPLICATION_PRIORITY; 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_LogOutputFunction SDL_log_function = SDL_LogOutput; static void *SDL_log_userdata = NULL; @@ -95,7 +97,9 @@ SDL_LogSetAllPriority(SDL_LogPriority priority) 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 @@ SDL_LogGetPriority(int category) 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_LogResetPriorities(void) SDL_free(entry); } - SDL_application_priority = DEFAULT_APPLICATION_PRIORITY; SDL_default_priority = DEFAULT_PRIORITY; + SDL_assert_priority = DEFAULT_ASSERT_PRIORITY; + SDL_application_priority = DEFAULT_APPLICATION_PRIORITY; } void @@ -302,6 +309,19 @@ SDL_LogOutput(void *userdata, int category, SDL_LogPriority priority, 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); diff --git a/src/video/cocoa/SDL_cocoavideo.m b/src/video/cocoa/SDL_cocoavideo.m index a38de1e09..688f7e9d1 100644 --- a/src/video/cocoa/SDL_cocoavideo.m +++ b/src/video/cocoa/SDL_cocoavideo.m @@ -217,6 +217,22 @@ return img; } +/* + * 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. * diff --git a/src/video/uikit/SDL_uikitvideo.m b/src/video/uikit/SDL_uikitvideo.m index 06b410cd9..58f32787f 100644 --- a/src/video/uikit/SDL_uikitvideo.m +++ b/src/video/uikit/SDL_uikitvideo.m @@ -129,6 +129,22 @@ static void UIKit_DeleteDevice(SDL_VideoDevice * device) 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: */