restore Windows console codepage on exit

This commit is contained in:
Martins Mozeiko
2017-11-17 20:55:38 -08:00
parent 086284d7b0
commit fccad2613a
3 changed files with 19 additions and 4 deletions
+1
View File
@@ -889,4 +889,5 @@ int main(int argc, char* argv[])
}
sys_output("[*] done!\n");
sys_output_done();
}
+17 -4
View File
@@ -13,9 +13,11 @@
static HANDLE gStdout;
static int gStdoutRedirected;
static UINT gOldCP;
void sys_output_init(void)
{
gOldCP = GetConsoleOutputCP();
SetConsoleOutputCP(CP_UTF8);
gStdout = GetStdHandle(STD_OUTPUT_HANDLE);
@@ -23,6 +25,11 @@ void sys_output_init(void)
gStdoutRedirected = !GetConsoleMode(gStdout, &mode);
}
void sys_output_done(void)
{
SetConsoleOutputCP(gOldCP);
}
void sys_output(const char* msg, ...)
{
char buffer[1024];
@@ -60,12 +67,14 @@ void sys_error(const char* msg, ...)
int wcount = MultiByteToWideChar(CP_UTF8, 0, buffer, -1, wbuffer, sizeof(buffer));
DWORD written;
WriteConsoleW(GetStdHandle(STD_ERROR_HANDLE), wbuffer, wcount, &written, NULL);
exit(EXIT_FAILURE);
WriteConsoleW(GetStdHandle(STD_ERROR_HANDLE), wbuffer, wcount - 1, &written, NULL);
}
else
{
fputs(buffer, stderr);
}
fputs(buffer, stderr);
SetConsoleOutputCP(gOldCP);
exit(EXIT_FAILURE);
}
@@ -168,6 +177,10 @@ void sys_output_init(void)
gStdoutRedirected = !isatty(STDOUT_FILENO);
}
void sys_output_done(void)
{
}
void sys_output(const char* msg, ...)
{
va_list arg;
+1
View File
@@ -4,6 +4,7 @@
// correctly outputs utf8 string
void sys_output_init(void);
void sys_output_done(void);
void sys_output(const char* msg, ...);
void NORETURN sys_error(const char* msg, ...);