From 63e58e5d663c218ccf5bff88c0a2a77ecaead602 Mon Sep 17 00:00:00 2001 From: Anonymous Maarten Date: Sat, 31 Aug 2024 17:22:58 +0200 Subject: [PATCH] SDL_Log: always use WriteFile/WriteConsole on Windows OutputDebugString and fprintf(stderr) (of mslibc) both output to the debug window of Visual Studio. In other debuggers (e.g. RAD), this does not happen. To avoid double output, this commit always uses WriteFile/WriteConsole. --- src/SDL_log.c | 13 +++++++------ 1 file changed, 7 insertions(+), 6 deletions(-) diff --git a/src/SDL_log.c b/src/SDL_log.c index 6022c3b3e7..92e7223566 100644 --- a/src/SDL_log.c +++ b/src/SDL_log.c @@ -512,7 +512,7 @@ void SDL_LogMessageV(int category, SDL_LogPriority priority, SDL_PRINTF_FORMAT_S } } -#if defined(SDL_PLATFORM_WIN32) && !defined(HAVE_STDIO_H) && !defined(SDL_PLATFORM_WINRT) && !defined(SDL_PLATFORM_GDK) +#if defined(SDL_PLATFORM_WIN32) && !defined(SDL_PLATFORM_WINRT) && !defined(SDL_PLATFORM_GDK) enum { CONSOLE_UNATTACHED = 0, CONSOLE_ATTACHED_CONSOLE = 1, @@ -536,7 +536,7 @@ static void SDLCALL SDL_LogOutput(void *userdata, int category, SDL_LogPriority LPTSTR tstr; bool isstack; -#if !defined(HAVE_STDIO_H) && !defined(SDL_PLATFORM_WINRT) && !defined(SDL_PLATFORM_GDK) +#if !defined(SDL_PLATFORM_WINRT) && !defined(SDL_PLATFORM_GDK) BOOL attachResult; DWORD attachError; DWORD consoleMode; @@ -575,7 +575,7 @@ static void SDLCALL SDL_LogOutput(void *userdata, int category, SDL_LogPriority } } } -#endif // !defined(HAVE_STDIO_H) && !defined(SDL_PLATFORM_WINRT) && !defined(SDL_PLATFORM_GDK) +#endif // !defined(SDL_PLATFORM_WINRT) && !defined(SDL_PLATFORM_GDK) length = SDL_strlen(SDL_GetLogPriorityPrefix(priority)) + SDL_strlen(message) + 1 + 1 + 1; output = SDL_small_alloc(char, length, &isstack); (void)SDL_snprintf(output, length, "%s%s\r\n", SDL_GetLogPriorityPrefix(priority), message); @@ -584,7 +584,7 @@ static void SDLCALL SDL_LogOutput(void *userdata, int category, SDL_LogPriority // Output to debugger OutputDebugString(tstr); -#if !defined(HAVE_STDIO_H) && !defined(SDL_PLATFORM_WINRT) && !defined(SDL_PLATFORM_GDK) +#if !defined(SDL_PLATFORM_WINRT) && !defined(SDL_PLATFORM_GDK) // Screen output to stderr, if console was attached. if (consoleAttached == CONSOLE_ATTACHED_CONSOLE) { if (!WriteConsole(stderrHandle, tstr, (DWORD)SDL_tcslen(tstr), &charsWritten, NULL)) { @@ -599,7 +599,7 @@ static void SDLCALL SDL_LogOutput(void *userdata, int category, SDL_LogPriority OutputDebugString(TEXT("Error calling WriteFile\r\n")); } } -#endif // !defined(HAVE_STDIO_H) && !defined(SDL_PLATFORM_WINRT) && !defined(SDL_PLATFORM_GDK) +#endif // !defined(SDL_PLATFORM_WINRT) && !defined(SDL_PLATFORM_GDK) SDL_free(tstr); SDL_small_free(output, isstack); @@ -648,7 +648,8 @@ static void SDLCALL SDL_LogOutput(void *userdata, int category, SDL_LogPriority } #endif #if defined(HAVE_STDIO_H) && \ - !(defined(SDL_PLATFORM_APPLE) && (defined(SDL_VIDEO_DRIVER_COCOA) || defined(SDL_VIDEO_DRIVER_UIKIT))) + !(defined(SDL_PLATFORM_APPLE) && (defined(SDL_VIDEO_DRIVER_COCOA) || defined(SDL_VIDEO_DRIVER_UIKIT))) && \ + !(defined(SDL_PLATFORM_WIN32)) (void)fprintf(stderr, "%s%s\n", SDL_GetLogPriorityPrefix(priority), message); #endif }