mirror of
https://github.com/mmozeiko/pkg2zip.git
synced 2026-09-02 19:23:09 +03:00
restore Windows console codepage on exit
This commit is contained in:
@@ -889,4 +889,5 @@ int main(int argc, char* argv[])
|
||||
}
|
||||
|
||||
sys_output("[*] done!\n");
|
||||
sys_output_done();
|
||||
}
|
||||
|
||||
+17
-4
@@ -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;
|
||||
|
||||
@@ -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, ...);
|
||||
|
||||
|
||||
Reference in New Issue
Block a user