Slightly improve logging on Windows
The characters won't display properly if the system codepage isn't UTF-8, but at least it shouldn't cut the line off prematurely.
This commit is contained in:
parent
834800c817
commit
3ef4bffaf9
@ -35,10 +35,9 @@ void al_print(LogLevel level, FILE *logfile, const char *fmt, ...)
|
|||||||
va_end(args2);
|
va_end(args2);
|
||||||
va_end(args);
|
va_end(args);
|
||||||
|
|
||||||
std::wstring wstr{utf8_to_wstr(str)};
|
|
||||||
if(gLogLevel >= level)
|
if(gLogLevel >= level)
|
||||||
{
|
{
|
||||||
fputws(wstr.c_str(), logfile);
|
fputs(str, logfile);
|
||||||
fflush(logfile);
|
fflush(logfile);
|
||||||
}
|
}
|
||||||
/* OutputDebugStringW has no 'level' property to distinguish between
|
/* OutputDebugStringW has no 'level' property to distinguish between
|
||||||
@ -46,6 +45,7 @@ void al_print(LogLevel level, FILE *logfile, const char *fmt, ...)
|
|||||||
* non-Release builds.
|
* non-Release builds.
|
||||||
*/
|
*/
|
||||||
#ifndef NDEBUG
|
#ifndef NDEBUG
|
||||||
|
std::wstring wstr{utf8_to_wstr(str)};
|
||||||
OutputDebugStringW(wstr.c_str());
|
OutputDebugStringW(wstr.c_str());
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
@ -46,70 +46,6 @@
|
|||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
|
||||||
#ifdef _WIN32
|
|
||||||
#define WIN32_LEAN_AND_MEAN
|
|
||||||
#include <windows.h>
|
|
||||||
|
|
||||||
static WCHAR *FromUTF8(const char *str)
|
|
||||||
{
|
|
||||||
WCHAR *out = NULL;
|
|
||||||
int len;
|
|
||||||
|
|
||||||
if((len=MultiByteToWideChar(CP_UTF8, 0, str, -1, NULL, 0)) > 0)
|
|
||||||
{
|
|
||||||
out = calloc(sizeof(WCHAR), (unsigned int)(len));
|
|
||||||
MultiByteToWideChar(CP_UTF8, 0, str, -1, out, len);
|
|
||||||
}
|
|
||||||
return out;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* Override printf, fprintf, and fwrite so we can print UTF-8 strings. */
|
|
||||||
static void al_fprintf(FILE *file, const char *fmt, ...)
|
|
||||||
{
|
|
||||||
char str[1024];
|
|
||||||
WCHAR *wstr;
|
|
||||||
va_list ap;
|
|
||||||
|
|
||||||
va_start(ap, fmt);
|
|
||||||
vsnprintf(str, sizeof(str), fmt, ap);
|
|
||||||
va_end(ap);
|
|
||||||
|
|
||||||
str[sizeof(str)-1] = 0;
|
|
||||||
wstr = FromUTF8(str);
|
|
||||||
if(!wstr)
|
|
||||||
fprintf(file, "<UTF-8 error> %s", str);
|
|
||||||
else
|
|
||||||
fprintf(file, "%ls", wstr);
|
|
||||||
free(wstr);
|
|
||||||
}
|
|
||||||
#define fprintf al_fprintf
|
|
||||||
#define printf(...) al_fprintf(stdout, __VA_ARGS__)
|
|
||||||
|
|
||||||
static size_t al_fwrite(const void *ptr, size_t size, size_t nmemb, FILE *file)
|
|
||||||
{
|
|
||||||
char str[1024];
|
|
||||||
WCHAR *wstr;
|
|
||||||
size_t len;
|
|
||||||
|
|
||||||
len = size * nmemb;
|
|
||||||
if(len > sizeof(str)-1)
|
|
||||||
len = sizeof(str)-1;
|
|
||||||
memcpy(str, ptr, len);
|
|
||||||
str[len] = 0;
|
|
||||||
|
|
||||||
wstr = FromUTF8(str);
|
|
||||||
if(!wstr)
|
|
||||||
fprintf(file, "<UTF-8 error> %s", str);
|
|
||||||
else
|
|
||||||
fprintf(file, "%ls", wstr);
|
|
||||||
free(wstr);
|
|
||||||
|
|
||||||
return len / size;
|
|
||||||
}
|
|
||||||
#define fwrite al_fwrite
|
|
||||||
#endif
|
|
||||||
|
|
||||||
|
|
||||||
#define MAX_WIDTH 80
|
#define MAX_WIDTH 80
|
||||||
|
|
||||||
static void printList(const char *list, char separator)
|
static void printList(const char *list, char separator)
|
||||||
@ -384,6 +320,11 @@ int main(int argc, char *argv[])
|
|||||||
ALCdevice *device;
|
ALCdevice *device;
|
||||||
ALCcontext *context;
|
ALCcontext *context;
|
||||||
|
|
||||||
|
#ifdef _WIN32
|
||||||
|
/* OpenAL Soft gives UTF-8 strings, so set the console to expect that. */
|
||||||
|
SetConsoleOutputCP(CP_UTF8);
|
||||||
|
#endif
|
||||||
|
|
||||||
if(argc > 1 && (strcmp(argv[1], "--help") == 0 ||
|
if(argc > 1 && (strcmp(argv[1], "--help") == 0 ||
|
||||||
strcmp(argv[1], "-h") == 0))
|
strcmp(argv[1], "-h") == 0))
|
||||||
{
|
{
|
||||||
|
Loading…
x
Reference in New Issue
Block a user