diff options
-rw-r--r-- | capinfos.c | 11 | ||||
-rw-r--r-- | captype.c | 11 | ||||
-rw-r--r-- | dumpcap.c | 11 | ||||
-rw-r--r-- | editcap.c | 11 | ||||
-rw-r--r-- | mergecap.c | 11 | ||||
-rw-r--r-- | randpkt.c | 11 | ||||
-rw-r--r-- | rawshark.c | 11 | ||||
-rw-r--r-- | text2pcap.c | 11 | ||||
-rw-r--r-- | tfshark.c | 11 | ||||
-rw-r--r-- | tshark.c | 11 | ||||
-rw-r--r-- | ui/qt/main.cpp | 11 | ||||
-rw-r--r-- | wsutil/unicode-utils.c | 14 | ||||
-rw-r--r-- | wsutil/unicode-utils.h | 11 |
13 files changed, 69 insertions, 77 deletions
diff --git a/capinfos.c b/capinfos.c index 3bf92a72ca..5f227e6afe 100644 --- a/capinfos.c +++ b/capinfos.c @@ -1726,15 +1726,12 @@ exit: #ifdef _WIN32 int -wmain(int argc, wchar_t *argv[]) +wmain(int argc, wchar_t *wc_argv[]) { - char **argv_utf8; + char **argv; - /* Convert our arg list from UTF-16LE to UTF-8. */ - argv_utf8 = g_malloc(argc * sizeof *argv_utf8); - for (int i = 0; i < argc; i++) - argv_utf8[i] = g_utf16_to_utf8(argv[i], -1, NULL, NULL, NULL); - return real_main(argc, argv_utf8); + argv = arg_list_utf_16to8(argc, wc_argv); + return real_main(argc, argv); } #else int @@ -207,15 +207,12 @@ real_main(int argc, char *argv[]) #ifdef _WIN32 int -wmain(int argc, wchar_t *argv[]) +wmain(int argc, wchar_t *wc_argv[]) { - char **argv_utf8; + char **argv; - /* Convert our arg list from UTF-16LE to UTF-8. */ - argv_utf8 = g_malloc(argc * sizeof *argv_utf8); - for (int i = 0; i < argc; i++) - argv_utf8[i] = g_utf16_to_utf8(argv[i], -1, NULL, NULL, NULL); - return real_main(argc, argv_utf8); + argv = arg_list_utf_16to8(argc, wc_argv); + return real_main(argc, argv); } #else int @@ -5273,15 +5273,12 @@ real_main(int argc, char *argv[]) #ifdef _WIN32 int -wmain(int argc, wchar_t *argv[]) +wmain(int argc, wchar_t *wc_argv[]) { - char **argv_utf8; + char **argv; - /* Convert our arg list from UTF-16LE to UTF-8. */ - argv_utf8 = g_malloc(argc * sizeof *argv_utf8); - for (int i = 0; i < argc; i++) - argv_utf8[i] = g_utf16_to_utf8(argv[i], -1, NULL, NULL, NULL); - return real_main(argc, argv_utf8); + argv = arg_list_utf_16to8(argc, wc_argv); + return real_main(argc, argv); } #else int @@ -1954,15 +1954,12 @@ clean_exit: #ifdef _WIN32 int -wmain(int argc, wchar_t *argv[]) +wmain(int argc, wchar_t *wc_argv[]) { - char **argv_utf8; + char **argv; - /* Convert our arg list from UTF-16LE to UTF-8. */ - argv_utf8 = g_malloc(argc * sizeof *argv_utf8); - for (int i = 0; i < argc; i++) - argv_utf8[i] = g_utf16_to_utf8(argv[i], -1, NULL, NULL, NULL); - return real_main(argc, argv_utf8); + argv = arg_list_utf_16to8(argc, wc_argv); + return real_main(argc, argv); } #else int diff --git a/mergecap.c b/mergecap.c index 516ab714da..172dcece3f 100644 --- a/mergecap.c +++ b/mergecap.c @@ -473,15 +473,12 @@ clean_exit: #ifdef _WIN32 int -wmain(int argc, wchar_t *argv[]) +wmain(int argc, wchar_t *wc_argv[]) { - char **argv_utf8; + char **argv; - /* Convert our arg list from UTF-16LE to UTF-8. */ - argv_utf8 = g_malloc(argc * sizeof *argv_utf8); - for (int i = 0; i < argc; i++) - argv_utf8[i] = g_utf16_to_utf8(argv[i], -1, NULL, NULL, NULL); - return real_main(argc, argv_utf8); + argv = arg_list_utf_16to8(argc, wc_argv); + return real_main(argc, argv); } #else int @@ -248,15 +248,12 @@ clean_exit: #ifdef _WIN32 int -wmain(int argc, wchar_t **argv) +wmain(int argc, wchar_t **wc_argv) { - char **argv_utf8; + char **argv; - /* Convert our arg list from UTF-16LE to UTF-8. */ - argv_utf8 = g_malloc(argc * sizeof *argv_utf8); - for (int i = 0; i < argc; i++) - argv_utf8[i] = g_utf16_to_utf8(argv[i], -1, NULL, NULL, NULL); - return real_main(argc, argv_utf8); + argv = arg_list_utf_16to8(argc, wc_argv); + return real_main(argc, argv); } #else int diff --git a/rawshark.c b/rawshark.c index c488bc44fd..89c6925271 100644 --- a/rawshark.c +++ b/rawshark.c @@ -832,15 +832,12 @@ clean_exit: #ifdef _WIN32 int -wmain(int argc, wchar_t *argv[]) +wmain(int argc, wchar_t *wc_argv[]) { - char **argv_utf8; + char **argv; - /* Convert our arg list from UTF-16LE to UTF-8. */ - argv_utf8 = g_malloc(argc * sizeof *argv_utf8); - for (int i = 0; i < argc; i++) - argv_utf8[i] = g_utf16_to_utf8(argv[i], -1, NULL, NULL, NULL); - return real_main(argc, argv_utf8); + argv = arg_list_utf_16to8(argc, wc_argv); + return real_main(argc, argv); } #else int diff --git a/text2pcap.c b/text2pcap.c index 3aa39bc87f..c5f795fb8c 100644 --- a/text2pcap.c +++ b/text2pcap.c @@ -1933,15 +1933,12 @@ clean_exit: #ifdef _WIN32 int -wmain(int argc, wchar_t *argv[]) +wmain(int argc, wchar_t *wc_argv[]) { - char **argv_utf8; + char **argv; - /* Convert our arg list from UTF-16LE to UTF-8. */ - argv_utf8 = g_malloc(argc * sizeof *argv_utf8); - for (int i = 0; i < argc; i++) - argv_utf8[i] = g_utf16_to_utf8(argv[i], -1, NULL, NULL, NULL); - return real_main(argc, argv_utf8); + argv = arg_list_utf_16to8(argc, wc_argv); + return real_main(argc, argv); } #else int @@ -1007,15 +1007,12 @@ clean_exit: #ifdef _WIN32 int -wmain(int argc, wchar_t *argv[]) +wmain(int argc, wchar_t *wc_argv[]) { - char **argv_utf8; + char **argv; - /* Convert our arg list from UTF-16LE to UTF-8. */ - argv_utf8 = g_malloc(argc * sizeof *argv_utf8); - for (int i = 0; i < argc; i++) - argv_utf8[i] = g_utf16_to_utf8(argv[i], -1, NULL, NULL, NULL); - return real_main(argc, argv_utf8); + argv = arg_list_utf_16to8(argc, wc_argv); + return real_main(argc, argv); } #else int @@ -2260,15 +2260,12 @@ clean_exit: #ifdef _WIN32 int -wmain(int argc, wchar_t *argv[]) +wmain(int argc, wchar_t *wc_argv[]) { - char **argv_utf8; + char **argv; - /* Convert our arg list from UTF-16LE to UTF-8. */ - argv_utf8 = g_malloc(argc * sizeof *argv_utf8); - for (int i = 0; i < argc; i++) - argv_utf8[i] = g_utf16_to_utf8(argv[i], -1, NULL, NULL, NULL); - return real_main(argc, argv_utf8); + argv = arg_list_utf_16to8(argc, wc_argv); + return real_main(argc, argv); } #else int diff --git a/ui/qt/main.cpp b/ui/qt/main.cpp index fbd367085a..351f71985e 100644 --- a/ui/qt/main.cpp +++ b/ui/qt/main.cpp @@ -357,7 +357,6 @@ int main(int argc, char *qt_argv[]) MainWindow *main_w; #ifdef _WIN32 - int opt; LPWSTR *wc_argv; int wc_argc; #endif @@ -420,13 +419,11 @@ int main(int argc, char *qt_argv[]) // strings into UTF-8. // wc_argv = CommandLineToArgvW(GetCommandLineW(), &wc_argc); - if (wc_argv && wc_argc == argc) { - argv = (char **) g_malloc(sizeof(char *) * argc); - for (opt = 0; opt < argc; opt++) { - argv[opt] = g_utf16_to_utf8((const gunichar2 *)wc_argv[opt], -1, NULL, NULL, NULL); - } + if (wc_argv) { + argc = wc_argc; + argv = arg_list_utf_16to8(wc_argc, wc_argv); + LocalFree(wc_argv); } /* XXX else bail because something is horribly, horribly wrong? */ - LocalFree(wc_argv); create_app_running_mutex(); #endif /* _WIN32 */ diff --git a/wsutil/unicode-utils.c b/wsutil/unicode-utils.c index 5a8fa2336a..46dbcadbda 100644 --- a/wsutil/unicode-utils.c +++ b/wsutil/unicode-utils.c @@ -141,6 +141,20 @@ utf_16to8(const wchar_t *utf16str) return utf8buf[idx]; } + +/* Convert our argument list from UTF-16 to UTF-8. */ +char ** +arg_list_utf_16to8(int argc, wchar_t *wc_argv[]) { + char **argv; + int i; + + argv = (char **) g_malloc(sizeof(char *) * argc); + for (i = 0; i < argc; i++) { + argv[i] = g_utf16_to_utf8(wc_argv[i], -1, NULL, NULL, NULL); + } + return argv; +} + #endif /* diff --git a/wsutil/unicode-utils.h b/wsutil/unicode-utils.h index 1190d63b03..6938914f3f 100644 --- a/wsutil/unicode-utils.h +++ b/wsutil/unicode-utils.h @@ -62,6 +62,17 @@ void utf_8to16_snprintf(TCHAR *utf16buf, gint utf16buf_len, const gchar* fmt, */ WS_DLL_PUBLIC gchar * utf_16to8(const wchar_t *utf16str); + +/** Convert the supplied program argument list from UTF-16 to UTF-8 + * return a pointer to the array of UTF-8 arguments. This is intended + * to be used to normalize command line arguments at program startup. + * + * @param argc The number of arguments. + * @param argv The argument values (vector). + */ +WS_DLL_PUBLIC +char ** arg_list_utf_16to8(int argc, wchar_t *wc_argv[]); + #endif /* _WIN32 */ /* |