aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--capinfos.c11
-rw-r--r--captype.c11
-rw-r--r--dumpcap.c11
-rw-r--r--editcap.c11
-rw-r--r--mergecap.c11
-rw-r--r--randpkt.c11
-rw-r--r--rawshark.c11
-rw-r--r--text2pcap.c11
-rw-r--r--tfshark.c11
-rw-r--r--tshark.c11
-rw-r--r--ui/qt/main.cpp11
-rw-r--r--wsutil/unicode-utils.c14
-rw-r--r--wsutil/unicode-utils.h11
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
diff --git a/captype.c b/captype.c
index e93f8637a2..99d8251e27 100644
--- a/captype.c
+++ b/captype.c
@@ -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
diff --git a/dumpcap.c b/dumpcap.c
index b4ef6422ea..1991e9d0a2 100644
--- a/dumpcap.c
+++ b/dumpcap.c
@@ -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
diff --git a/editcap.c b/editcap.c
index 8f754f88e1..5114135d7d 100644
--- a/editcap.c
+++ b/editcap.c
@@ -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
diff --git a/randpkt.c b/randpkt.c
index c4786c6452..a39cbf53de 100644
--- a/randpkt.c
+++ b/randpkt.c
@@ -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
diff --git a/tfshark.c b/tfshark.c
index d91faeadf5..0a44c4eba9 100644
--- a/tfshark.c
+++ b/tfshark.c
@@ -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
diff --git a/tshark.c b/tshark.c
index e716aa9db3..387845d66f 100644
--- a/tshark.c
+++ b/tshark.c
@@ -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 */
/*