Fixed bug 3323 - SDL_LogOutput prints message twice on Windows when linked with libc

Simon Hug

If SDL2 is compiled with HAVE_LIBC on Windows, the SDL_LogOutput function has two ways of printing a message. WriteConsole and fprintf.
This commit is contained in:
Sam Lantinga 2016-10-01 12:28:05 -07:00
parent 0b576962ca
commit 6f11545a2d

View File

@ -324,7 +324,7 @@ SDL_LogOutput(void *userdata, int category, SDL_LogPriority priority,
size_t length; size_t length;
LPTSTR tstr; LPTSTR tstr;
#ifndef __WINRT__ #if !defined(HAVE_STDIO_H) && !defined(__WINRT__)
BOOL attachResult; BOOL attachResult;
DWORD attachError; DWORD attachError;
unsigned long charsWritten; unsigned long charsWritten;
@ -356,7 +356,7 @@ SDL_LogOutput(void *userdata, int category, SDL_LogPriority priority,
stderrHandle = GetStdHandle(STD_ERROR_HANDLE); stderrHandle = GetStdHandle(STD_ERROR_HANDLE);
} }
} }
#endif /* ifndef __WINRT__ */ #endif /* !defined(HAVE_STDIO_H) && !defined(__WINRT__) */
length = SDL_strlen(SDL_priority_prefixes[priority]) + 2 + SDL_strlen(message) + 1 + 1 + 1; length = SDL_strlen(SDL_priority_prefixes[priority]) + 2 + SDL_strlen(message) + 1 + 1 + 1;
output = SDL_stack_alloc(char, length); output = SDL_stack_alloc(char, length);
@ -366,7 +366,7 @@ SDL_LogOutput(void *userdata, int category, SDL_LogPriority priority,
/* Output to debugger */ /* Output to debugger */
OutputDebugString(tstr); OutputDebugString(tstr);
#ifndef __WINRT__ #if !defined(HAVE_STDIO_H) && !defined(__WINRT__)
/* Screen output to stderr, if console was attached. */ /* Screen output to stderr, if console was attached. */
if (consoleAttached == 1) { if (consoleAttached == 1) {
if (!WriteConsole(stderrHandle, tstr, lstrlen(tstr), &charsWritten, NULL)) { if (!WriteConsole(stderrHandle, tstr, lstrlen(tstr), &charsWritten, NULL)) {
@ -376,7 +376,7 @@ SDL_LogOutput(void *userdata, int category, SDL_LogPriority priority,
} }
} }
} }
#endif /* ifndef __WINRT__ */ #endif /* !defined(HAVE_STDIO_H) && !defined(__WINRT__) */
SDL_free(tstr); SDL_free(tstr);
SDL_stack_free(output); SDL_stack_free(output);