Bring back arg_list_utf_16to8(), but have it just do UTF-16-to-UTF-8 mapping.
Call it from wmain() in the command-line tools, passing it the input argument count and vector, and call it from main() in Wireshark, after getting a UTF-16 argument vector from passing the result of GetCommandLineW() to CommandLineToArgvW(). Change-Id: I0e51703c0a6c92f7892d196e700ab437bd702514 Reviewed-on: https://code.wireshark.org/review/30063 Petri-Dish: Guy Harris <guy@alum.mit.edu> Tested-by: Petri Dish Buildbot Reviewed-by: Guy Harris <guy@alum.mit.edu>
This commit is contained in:
parent
9388bd0436
commit
bce13644e9
11
capinfos.c
11
capinfos.c
|
@ -1726,15 +1726,12 @@ exit:
|
||||||
|
|
||||||
#ifdef _WIN32
|
#ifdef _WIN32
|
||||||
int
|
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 = arg_list_utf_16to8(argc, wc_argv);
|
||||||
argv_utf8 = g_malloc(argc * sizeof *argv_utf8);
|
return real_main(argc, argv);
|
||||||
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);
|
|
||||||
}
|
}
|
||||||
#else
|
#else
|
||||||
int
|
int
|
||||||
|
|
11
captype.c
11
captype.c
|
@ -207,15 +207,12 @@ real_main(int argc, char *argv[])
|
||||||
|
|
||||||
#ifdef _WIN32
|
#ifdef _WIN32
|
||||||
int
|
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 = arg_list_utf_16to8(argc, wc_argv);
|
||||||
argv_utf8 = g_malloc(argc * sizeof *argv_utf8);
|
return real_main(argc, argv);
|
||||||
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);
|
|
||||||
}
|
}
|
||||||
#else
|
#else
|
||||||
int
|
int
|
||||||
|
|
11
dumpcap.c
11
dumpcap.c
|
@ -5273,15 +5273,12 @@ real_main(int argc, char *argv[])
|
||||||
|
|
||||||
#ifdef _WIN32
|
#ifdef _WIN32
|
||||||
int
|
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 = arg_list_utf_16to8(argc, wc_argv);
|
||||||
argv_utf8 = g_malloc(argc * sizeof *argv_utf8);
|
return real_main(argc, argv);
|
||||||
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);
|
|
||||||
}
|
}
|
||||||
#else
|
#else
|
||||||
int
|
int
|
||||||
|
|
11
editcap.c
11
editcap.c
|
@ -1954,15 +1954,12 @@ clean_exit:
|
||||||
|
|
||||||
#ifdef _WIN32
|
#ifdef _WIN32
|
||||||
int
|
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 = arg_list_utf_16to8(argc, wc_argv);
|
||||||
argv_utf8 = g_malloc(argc * sizeof *argv_utf8);
|
return real_main(argc, argv);
|
||||||
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);
|
|
||||||
}
|
}
|
||||||
#else
|
#else
|
||||||
int
|
int
|
||||||
|
|
11
mergecap.c
11
mergecap.c
|
@ -473,15 +473,12 @@ clean_exit:
|
||||||
|
|
||||||
#ifdef _WIN32
|
#ifdef _WIN32
|
||||||
int
|
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 = arg_list_utf_16to8(argc, wc_argv);
|
||||||
argv_utf8 = g_malloc(argc * sizeof *argv_utf8);
|
return real_main(argc, argv);
|
||||||
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);
|
|
||||||
}
|
}
|
||||||
#else
|
#else
|
||||||
int
|
int
|
||||||
|
|
11
randpkt.c
11
randpkt.c
|
@ -248,15 +248,12 @@ clean_exit:
|
||||||
|
|
||||||
#ifdef _WIN32
|
#ifdef _WIN32
|
||||||
int
|
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 = arg_list_utf_16to8(argc, wc_argv);
|
||||||
argv_utf8 = g_malloc(argc * sizeof *argv_utf8);
|
return real_main(argc, argv);
|
||||||
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);
|
|
||||||
}
|
}
|
||||||
#else
|
#else
|
||||||
int
|
int
|
||||||
|
|
11
rawshark.c
11
rawshark.c
|
@ -832,15 +832,12 @@ clean_exit:
|
||||||
|
|
||||||
#ifdef _WIN32
|
#ifdef _WIN32
|
||||||
int
|
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 = arg_list_utf_16to8(argc, wc_argv);
|
||||||
argv_utf8 = g_malloc(argc * sizeof *argv_utf8);
|
return real_main(argc, argv);
|
||||||
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);
|
|
||||||
}
|
}
|
||||||
#else
|
#else
|
||||||
int
|
int
|
||||||
|
|
11
text2pcap.c
11
text2pcap.c
|
@ -1933,15 +1933,12 @@ clean_exit:
|
||||||
|
|
||||||
#ifdef _WIN32
|
#ifdef _WIN32
|
||||||
int
|
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 = arg_list_utf_16to8(argc, wc_argv);
|
||||||
argv_utf8 = g_malloc(argc * sizeof *argv_utf8);
|
return real_main(argc, argv);
|
||||||
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);
|
|
||||||
}
|
}
|
||||||
#else
|
#else
|
||||||
int
|
int
|
||||||
|
|
11
tfshark.c
11
tfshark.c
|
@ -1007,15 +1007,12 @@ clean_exit:
|
||||||
|
|
||||||
#ifdef _WIN32
|
#ifdef _WIN32
|
||||||
int
|
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 = arg_list_utf_16to8(argc, wc_argv);
|
||||||
argv_utf8 = g_malloc(argc * sizeof *argv_utf8);
|
return real_main(argc, argv);
|
||||||
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);
|
|
||||||
}
|
}
|
||||||
#else
|
#else
|
||||||
int
|
int
|
||||||
|
|
11
tshark.c
11
tshark.c
|
@ -2260,15 +2260,12 @@ clean_exit:
|
||||||
|
|
||||||
#ifdef _WIN32
|
#ifdef _WIN32
|
||||||
int
|
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 = arg_list_utf_16to8(argc, wc_argv);
|
||||||
argv_utf8 = g_malloc(argc * sizeof *argv_utf8);
|
return real_main(argc, argv);
|
||||||
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);
|
|
||||||
}
|
}
|
||||||
#else
|
#else
|
||||||
int
|
int
|
||||||
|
|
|
@ -357,7 +357,6 @@ int main(int argc, char *qt_argv[])
|
||||||
MainWindow *main_w;
|
MainWindow *main_w;
|
||||||
|
|
||||||
#ifdef _WIN32
|
#ifdef _WIN32
|
||||||
int opt;
|
|
||||||
LPWSTR *wc_argv;
|
LPWSTR *wc_argv;
|
||||||
int wc_argc;
|
int wc_argc;
|
||||||
#endif
|
#endif
|
||||||
|
@ -420,13 +419,11 @@ int main(int argc, char *qt_argv[])
|
||||||
// strings into UTF-8.
|
// strings into UTF-8.
|
||||||
//
|
//
|
||||||
wc_argv = CommandLineToArgvW(GetCommandLineW(), &wc_argc);
|
wc_argv = CommandLineToArgvW(GetCommandLineW(), &wc_argc);
|
||||||
if (wc_argv && wc_argc == argc) {
|
if (wc_argv) {
|
||||||
argv = (char **) g_malloc(sizeof(char *) * argc);
|
argc = wc_argc;
|
||||||
for (opt = 0; opt < argc; opt++) {
|
argv = arg_list_utf_16to8(wc_argc, wc_argv);
|
||||||
argv[opt] = g_utf16_to_utf8((const gunichar2 *)wc_argv[opt], -1, NULL, NULL, NULL);
|
|
||||||
}
|
|
||||||
} /* XXX else bail because something is horribly, horribly wrong? */
|
|
||||||
LocalFree(wc_argv);
|
LocalFree(wc_argv);
|
||||||
|
} /* XXX else bail because something is horribly, horribly wrong? */
|
||||||
|
|
||||||
create_app_running_mutex();
|
create_app_running_mutex();
|
||||||
#endif /* _WIN32 */
|
#endif /* _WIN32 */
|
||||||
|
|
|
@ -141,6 +141,20 @@ utf_16to8(const wchar_t *utf16str)
|
||||||
|
|
||||||
return utf8buf[idx];
|
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
|
#endif
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
|
|
@ -62,6 +62,17 @@ void utf_8to16_snprintf(TCHAR *utf16buf, gint utf16buf_len, const gchar* fmt,
|
||||||
*/
|
*/
|
||||||
WS_DLL_PUBLIC
|
WS_DLL_PUBLIC
|
||||||
gchar * utf_16to8(const wchar_t *utf16str);
|
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 */
|
#endif /* _WIN32 */
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
|
Loading…
Reference in New Issue