From a5306d60eec383f0c697bd16ac308254dc1dce45 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=9D=8E=E9=80=9A=E6=B4=B2?= Date: Sat, 12 Nov 2022 23:30:34 +0800 Subject: [PATCH] Windows: enable console processing, disable output buffer UCRT doesn't support line buffering, which makes modules being not printed ASAP --- src/common/init.c | 15 ++++++++------- 1 file changed, 8 insertions(+), 7 deletions(-) diff --git a/src/common/init.c b/src/common/init.c index 962bde9fe..8a424a483 100644 --- a/src/common/init.c +++ b/src/common/init.c @@ -125,7 +125,6 @@ static void initState(FFstate* state) #ifdef WIN32 //https://learn.microsoft.com/en-us/cpp/c-runtime-library/reference/setlocale-wsetlocale?source=recommendations&view=msvc-170#utf-8-support setlocale(LC_ALL, ".UTF8"); - setvbuf(stdout, NULL, _IOFBF, 4096); #endif state->logoWidth = 0; @@ -334,12 +333,9 @@ static void resetConsole() #ifdef _WIN32 BOOL WINAPI consoleHandler(DWORD signal) { - if(signal == CTRL_C_EVENT) - { - resetConsole(); - return TRUE; - } - return false; + FF_UNUSED(signal); + resetConsole(); + exit(0); } #else static void exitSignalHandler(int signal) @@ -360,6 +356,11 @@ void ffStart(FFinstance* instance) #ifdef _WIN32 SetConsoleCtrlHandler(consoleHandler, TRUE); + HANDLE hStdout = GetStdHandle(STD_OUTPUT_HANDLE); + DWORD mode = 0; + GetConsoleMode(hStdout, &mode); + SetConsoleMode(hStdout, mode | ENABLE_PROCESSED_OUTPUT | ENABLE_VIRTUAL_TERMINAL_PROCESSING); + SetConsoleOutputCP(CP_UTF8); #else struct sigaction action = { .sa_handler = exitSignalHandler }; sigaction(SIGINT, &action, NULL);