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 int
main (int argc, char ** argv) tr_main (int argc,
char * argv[])
{ {
tr_session * h; tr_session * h;
tr_ctor * ctor; tr_ctor * ctor;
@@ -233,10 +234,6 @@ main (int argc, char ** argv)
size_t fileLength; size_t fileLength;
const char * str; 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_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_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); 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 int
main (int argc, tr_main (int argc,
char ** argv) char * argv[])
{ {
const dtr_callbacks cb = const dtr_callbacks cb =
{ {
@@ -654,10 +654,6 @@ main (int argc,
tr_variant * const settings = &arg.settings; tr_variant * const settings = &arg.settings;
const char ** const configDir = &arg.configDir; const char ** const configDir = &arg.configDir;
#ifdef _WIN32
tr_win32_make_args_utf8 (&argc, &argv);
#endif
key_pidfile = tr_quark_new ("pidfile", 7); key_pidfile = tr_quark_new ("pidfile", 7);
/* load settings from defaults + config file */ /* load settings from defaults + config file */

View File

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

View File

@@ -1184,6 +1184,17 @@ tr_win32_make_args_utf8 (int * argc,
LocalFree (my_wide_argv); 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 #endif
/*** /***

View File

@@ -196,6 +196,25 @@ char * tr_win32_format_message (uint32_t code);
void tr_win32_make_args_utf8 (int * argc, void tr_win32_make_args_utf8 (int * argc,
char *** argv); 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 #endif
/*** /***

View File

@@ -574,12 +574,9 @@ MyApp::notifyApp (const QString& title, const QString& body) const
***/ ***/
int 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); MyApp app (argc, argv);
return app.exec (); return app.exec ();
} }

View File

@@ -126,15 +126,12 @@ tr_getcwd (void)
} }
int int
main (int argc, char * argv[]) tr_main (int argc,
char * argv[])
{ {
char * out2 = NULL; char * out2 = NULL;
tr_metainfo_builder * b = NULL; tr_metainfo_builder * b = NULL;
#ifdef _WIN32
tr_win32_make_args_utf8 (&argc, &argv);
#endif
tr_logSetLevel (TR_LOG_ERROR); 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_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_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 int
main (int argc, char * argv[]) tr_main (int argc,
char * argv[])
{ {
int i; int i;
int changedCount = 0; int changedCount = 0;
#ifdef _WIN32
tr_win32_make_args_utf8 (&argc, &argv);
#endif
files = tr_new0 (const char*, argc); files = tr_new0 (const char*, argc);
tr_logSetLevel (TR_LOG_ERROR); tr_logSetLevel (TR_LOG_ERROR);

View File

@@ -283,16 +283,13 @@ doScrape (const tr_info * inf)
} }
int int
main (int argc, char * argv[]) tr_main (int argc,
char * argv[])
{ {
int err; int err;
tr_info inf; tr_info inf;
tr_ctor * ctor; tr_ctor * ctor;
#ifdef _WIN32
tr_win32_make_args_utf8 (&argc, &argv);
#endif
tr_logSetLevel (TR_LOG_ERROR); 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_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_size_init (DISK_K, DISK_K_STR, DISK_M_STR, DISK_G_STR, DISK_T_STR);