Commit cbf2a9bf authored by Marton Balint's avatar Marton Balint

avutil/log: add support for multibyte console log for win32

Fixes ticket #5398.
Signed-off-by: 's avatarMarton Balint <cus@passwd.hu>
parent 31acaa1e
...@@ -120,6 +120,31 @@ static const uint32_t color[16 + AV_CLASS_CATEGORY_NB] = { ...@@ -120,6 +120,31 @@ static const uint32_t color[16 + AV_CLASS_CATEGORY_NB] = {
#endif #endif
static int use_color = -1; static int use_color = -1;
#if defined(_WIN32) && HAVE_SETCONSOLETEXTATTRIBUTE && HAVE_GETSTDHANDLE
static void win_console_puts(const char *str)
{
const uint8_t *q = str;
uint16_t line[LINE_SZ];
while (*q) {
uint16_t *buf = line;
DWORD nb_chars = 0;
DWORD written;
while (*q && nb_chars < LINE_SZ - 1) {
uint32_t ch;
uint16_t tmp;
GET_UTF8(ch, *q ? *q++ : 0, ch = 0xfffd; goto continue_on_invalid;)
continue_on_invalid:
PUT_UTF16(ch, tmp, *buf++ = tmp; nb_chars++;)
}
WriteConsoleW(con, line, nb_chars, &written, NULL);
}
}
#endif
static void check_color_terminal(void) static void check_color_terminal(void)
{ {
char *term = getenv("TERM"); char *term = getenv("TERM");
...@@ -195,7 +220,7 @@ static void colored_fputs(int level, int tint, const char *str) ...@@ -195,7 +220,7 @@ static void colored_fputs(int level, int tint, const char *str)
if (con != INVALID_HANDLE_VALUE) { if (con != INVALID_HANDLE_VALUE) {
if (local_use_color) if (local_use_color)
SetConsoleTextAttribute(con, background | color[level]); SetConsoleTextAttribute(con, background | color[level]);
fputs(str, stderr); win_console_puts(str);
if (local_use_color) if (local_use_color)
SetConsoleTextAttribute(con, attr_orig); SetConsoleTextAttribute(con, attr_orig);
} else { } else {
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment