diff --git a/cli/cli.c b/cli/cli.c index 2c9f06a09..c737ddf74 100644 --- a/cli/cli.c +++ b/cli/cli.c @@ -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); diff --git a/daemon/daemon.c b/daemon/daemon.c index 230aab84c..4380670f1 100644 --- a/daemon/daemon.c +++ b/daemon/daemon.c @@ -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 */ diff --git a/daemon/remote.c b/daemon/remote.c index ee5b88068..2d62fdd8d 100644 --- a/daemon/remote.c +++ b/daemon/remote.c @@ -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; diff --git a/libtransmission/utils.c b/libtransmission/utils.c index e40c9a9c0..68f0228cc 100644 --- a/libtransmission/utils.c +++ b/libtransmission/utils.c @@ -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 /*** diff --git a/libtransmission/utils.h b/libtransmission/utils.h index cb6bb3ad8..a16be5c90 100644 --- a/libtransmission/utils.h +++ b/libtransmission/utils.h @@ -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 /*** diff --git a/qt/app.cc b/qt/app.cc index 7372aa60d..810f3fcc7 100644 --- a/qt/app.cc +++ b/qt/app.cc @@ -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 (); } diff --git a/utils/create.c b/utils/create.c index c76c7a374..fc61fd3dc 100644 --- a/utils/create.c +++ b/utils/create.c @@ -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); diff --git a/utils/edit.c b/utils/edit.c index 4559e17db..eff35ab9d 100644 --- a/utils/edit.c +++ b/utils/edit.c @@ -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); diff --git a/utils/show.c b/utils/show.c index 98b901f0e..5dae190fa 100644 --- a/utils/show.c +++ b/utils/show.c @@ -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);