Use UTF-8 for console I/O on Windows

This commit is contained in:
Mike Gelfand 2015-04-21 10:07:57 +00:00
parent 7ce0ebfee7
commit c1b10abe0f
9 changed files with 44 additions and 36 deletions

View File

@ -222,7 +222,8 @@ getConfigDir (int argc, const char ** argv)
}
int
main (int argc, char ** argv)
tr_main (int argc,
char * argv[])
{
tr_session * h;
tr_ctor * ctor;
@ -233,10 +234,6 @@ main (int argc, char ** argv)
size_t fileLength;
const char * str;
#ifdef _WIN32
tr_win32_make_args_utf8 (&argc, &argv);
#endif
tr_formatter_mem_init (MEM_K, MEM_K_STR, MEM_M_STR, MEM_G_STR, MEM_T_STR);
tr_formatter_size_init (DISK_K,DISK_K_STR, DISK_M_STR, DISK_G_STR, DISK_T_STR);
tr_formatter_speed_init (SPEED_K, SPEED_K_STR, SPEED_M_STR, SPEED_G_STR, SPEED_T_STR);

View File

@ -636,8 +636,8 @@ cleanup:
}
int
main (int argc,
char ** argv)
tr_main (int argc,
char * argv[])
{
const dtr_callbacks cb =
{
@ -654,10 +654,6 @@ main (int argc,
tr_variant * const settings = &arg.settings;
const char ** const configDir = &arg.configDir;
#ifdef _WIN32
tr_win32_make_args_utf8 (&argc, &argv);
#endif
key_pidfile = tr_quark_new ("pidfile", 7);
/* load settings from defaults + config file */

View File

@ -2401,17 +2401,14 @@ getHostAndPortAndRpcUrl (int * argc, char ** argv,
}
int
main (int argc, char ** argv)
tr_main (int argc,
char * argv[])
{
int port = DEFAULT_PORT;
char * host = NULL;
char * rpcurl = NULL;
int exit_status = EXIT_SUCCESS;
#ifdef _WIN32
tr_win32_make_args_utf8 (&argc, &argv);
#endif
if (argc < 2) {
showUsage ();
return EXIT_FAILURE;

View File

@ -1184,6 +1184,17 @@ tr_win32_make_args_utf8 (int * argc,
LocalFree (my_wide_argv);
}
int
tr_main_win32 (int argc,
char ** argv,
int (*real_main) (int, char **))
{
tr_win32_make_args_utf8 (&argc, &argv);
SetConsoleCP (CP_UTF8);
SetConsoleOutputCP (CP_UTF8);
return real_main (argc, argv);
}
#endif
/***

View File

@ -196,6 +196,25 @@ char * tr_win32_format_message (uint32_t code);
void tr_win32_make_args_utf8 (int * argc,
char *** argv);
int tr_main_win32 (int argc,
char ** argv,
int (*real_main) (int, char **));
#define tr_main(...) \
static tr_main_win32_impl (__VA_ARGS__); \
int \
main (int argc, \
char * argv[]) \
{ \
return tr_main_win32 (argc, argv, &tr_main_win32_impl); \
} \
static int \
tr_main_win32_impl (__VA_ARGS__)
#else
#define tr_main main
#endif
/***

View File

@ -574,12 +574,9 @@ MyApp::notifyApp (const QString& title, const QString& body) const
***/
int
main (int argc, char * argv[])
tr_main (int argc,
char * argv[])
{
#ifdef _WIN32
tr_win32_make_args_utf8 (&argc, &argv);
#endif
MyApp app (argc, argv);
return app.exec ();
}

View File

@ -126,15 +126,12 @@ tr_getcwd (void)
}
int
main (int argc, char * argv[])
tr_main (int argc,
char * argv[])
{
char * out2 = NULL;
tr_metainfo_builder * b = NULL;
#ifdef _WIN32
tr_win32_make_args_utf8 (&argc, &argv);
#endif
tr_logSetLevel (TR_LOG_ERROR);
tr_formatter_mem_init (MEM_K, MEM_K_STR, MEM_M_STR, MEM_G_STR, MEM_T_STR);
tr_formatter_size_init (DISK_K, DISK_K_STR, DISK_M_STR, DISK_G_STR, DISK_T_STR);

View File

@ -286,15 +286,12 @@ addURL (tr_variant * metainfo, const char * url)
}
int
main (int argc, char * argv[])
tr_main (int argc,
char * argv[])
{
int i;
int changedCount = 0;
#ifdef _WIN32
tr_win32_make_args_utf8 (&argc, &argv);
#endif
files = tr_new0 (const char*, argc);
tr_logSetLevel (TR_LOG_ERROR);

View File

@ -283,16 +283,13 @@ doScrape (const tr_info * inf)
}
int
main (int argc, char * argv[])
tr_main (int argc,
char * argv[])
{
int err;
tr_info inf;
tr_ctor * ctor;
#ifdef _WIN32
tr_win32_make_args_utf8 (&argc, &argv);
#endif
tr_logSetLevel (TR_LOG_ERROR);
tr_formatter_mem_init (MEM_K, MEM_K_STR, MEM_M_STR, MEM_G_STR, MEM_T_STR);
tr_formatter_size_init (DISK_K, DISK_K_STR, DISK_M_STR, DISK_G_STR, DISK_T_STR);