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
|
||||
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
|
||||
|
|
11
captype.c
11
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
|
||||
|
|
11
dumpcap.c
11
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
|
||||
|
|
11
editcap.c
11
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
|
||||
|
|
11
mergecap.c
11
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
|
||||
|
|
11
randpkt.c
11
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
|
||||
|
|
11
rawshark.c
11
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
|
||||
|
|
11
text2pcap.c
11
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
|
||||
|
|
11
tfshark.c
11
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
|
||||
|
|
11
tshark.c
11
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
|
||||
|
|
|
@ -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 */
|
||||
|
|
|
@ -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
|
||||
|
||||
/*
|
||||
|
|
|
@ -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 */
|
||||
|
||||
/*
|
||||
|
|
Loading…
Reference in New Issue