mirror of https://github.com/encounter/SDL.git
Fixed SDL_Log not working on windows if the output is being redirected.
This commit is contained in:
parent
14452e9550
commit
5a735da968
|
@ -303,7 +303,7 @@ SDL_LogMessageV(int category, SDL_LogPriority priority, const char *fmt, va_list
|
||||||
}
|
}
|
||||||
|
|
||||||
#if defined(__WIN32__) && !defined(HAVE_STDIO_H) && !defined(__WINRT__)
|
#if defined(__WIN32__) && !defined(HAVE_STDIO_H) && !defined(__WINRT__)
|
||||||
/* Flag tracking the attachment of the console: 0=unattached, 1=attached, -1=error */
|
/* Flag tracking the attachment of the console: 0=unattached, 1=attached to a console, 2=attached to a file, -1=error */
|
||||||
static int consoleAttached = 0;
|
static int consoleAttached = 0;
|
||||||
|
|
||||||
/* Handle to stderr output of console. */
|
/* Handle to stderr output of console. */
|
||||||
|
@ -326,6 +326,7 @@ SDL_LogOutput(void *userdata, int category, SDL_LogPriority priority,
|
||||||
BOOL attachResult;
|
BOOL attachResult;
|
||||||
DWORD attachError;
|
DWORD attachError;
|
||||||
unsigned long charsWritten;
|
unsigned long charsWritten;
|
||||||
|
DWORD consoleMode;
|
||||||
|
|
||||||
/* Maybe attach console and get stderr handle */
|
/* Maybe attach console and get stderr handle */
|
||||||
if (consoleAttached == 0) {
|
if (consoleAttached == 0) {
|
||||||
|
@ -350,9 +351,15 @@ SDL_LogOutput(void *userdata, int category, SDL_LogPriority priority,
|
||||||
/* Newly attached */
|
/* Newly attached */
|
||||||
consoleAttached = 1;
|
consoleAttached = 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (consoleAttached == 1) {
|
if (consoleAttached == 1) {
|
||||||
stderrHandle = GetStdHandle(STD_ERROR_HANDLE);
|
stderrHandle = GetStdHandle(STD_ERROR_HANDLE);
|
||||||
|
|
||||||
|
if (GetConsoleMode(stderrHandle, &consoleMode) == 0) {
|
||||||
|
/* WriteConsole fails if the output is redirected to a file. Must use WriteFile instead. */
|
||||||
|
OutputDebugString(TEXT("Console ouput is being redirected\r\n"));
|
||||||
|
consoleAttached = 2;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
#endif /* !defined(HAVE_STDIO_H) && !defined(__WINRT__) */
|
#endif /* !defined(HAVE_STDIO_H) && !defined(__WINRT__) */
|
||||||
|
@ -374,6 +381,11 @@ SDL_LogOutput(void *userdata, int category, SDL_LogPriority priority,
|
||||||
OutputDebugString(TEXT("Insufficient heap memory to write message\r\n"));
|
OutputDebugString(TEXT("Insufficient heap memory to write message\r\n"));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
} else if (consoleAttached == 2) {
|
||||||
|
if (!WriteFile(stderrHandle, output, lstrlenA(output), &charsWritten, NULL)) {
|
||||||
|
OutputDebugString(TEXT("Error calling WriteFile\r\n"));
|
||||||
|
}
|
||||||
}
|
}
|
||||||
#endif /* !defined(HAVE_STDIO_H) && !defined(__WINRT__) */
|
#endif /* !defined(HAVE_STDIO_H) && !defined(__WINRT__) */
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue