From 3bc1fc38026b7438361c23e3fe0d8bb16a4b1583 Mon Sep 17 00:00:00 2001 From: Gerald Combs Date: Thu, 6 Jan 2011 23:28:58 +0000 Subject: On Windows, convert all of our command-line arguments from UTF-16 to UTF-8 where we don't already do so. In Wireshark use g_utf16_to_utf8 instead of utf_16to8. This should fix bug 5520. svn path=/trunk/; revision=35411 --- Makefile.nmake | 12 ++++++------ capinfos.c | 21 +++++++++++++++++++++ dumpcap.c | 13 +++++++++++++ editcap.c | 18 ++++++++++++++++++ gtk/main.c | 3 +-- mergecap.c | 21 +++++++++++++++++++++ randpkt.c | 22 ++++++++++++++++++++++ rawshark.c | 18 +++++++++++++++++- text2pcap.c | 22 +++++++++++++++++++++- tshark.c | 13 +++++++++++++ 10 files changed, 153 insertions(+), 10 deletions(-) diff --git a/Makefile.nmake b/Makefile.nmake index d945a334a4..efb9a54cc8 100644 --- a/Makefile.nmake +++ b/Makefile.nmake @@ -92,7 +92,7 @@ wireshark_LIBS= wiretap\wiretap-$(WTAP_VERSION).lib \ !ENDIF tshark_LIBS= wiretap\wiretap-$(WTAP_VERSION).lib \ - wsock32.lib user32.lib \ + wsock32.lib user32.lib shell32.lib \ $(GLIB_LIBS) \ wsutil\libwsutil.lib \ $(GNUTLS_LIBS) \ @@ -112,7 +112,7 @@ tshark_LIBS= wiretap\wiretap-$(WTAP_VERSION).lib \ !ENDIF rawshark_LIBS= wiretap\wiretap-$(WTAP_VERSION).lib \ - wsock32.lib user32.lib \ + wsock32.lib user32.lib shell32.lib \ $(GLIB_LIBS) \ wsutil\libwsutil.lib \ $(GNUTLS_LIBS) \ @@ -143,17 +143,17 @@ editcap_LIBS= wiretap\wiretap-$(WTAP_VERSION).lib \ $(GLIB_LIBS) mergecap_LIBS= wiretap\wiretap-$(WTAP_VERSION).lib \ - wsock32.lib user32.lib \ + wsock32.lib user32.lib shell32.lib \ wsutil\libwsutil.lib \ $(GLIB_LIBS) text2pcap_LIBS= wiretap\wiretap-$(WTAP_VERSION).lib \ - wsock32.lib user32.lib \ + wsock32.lib user32.lib shell32.lib \ wsutil\libwsutil.lib \ $(GLIB_LIBS) dumpcap_LIBS= \ - wsock32.lib user32.lib \ + wsock32.lib user32.lib shell32.lib \ wsutil\libwsutil.lib \ $(GLIB_LIBS) \ $(GTHREAD_LIBS) @@ -177,7 +177,7 @@ dftest_LIBS= wiretap\wiretap-$(WTAP_VERSION).lib \ !ENDIF randpkt_LIBS= wiretap\wiretap-$(WTAP_VERSION).lib \ - user32.lib \ + user32.lib shell32.lib \ wsutil\libwsutil.lib \ $(GLIB_LIBS) diff --git a/capinfos.c b/capinfos.c index 08017999b4..86f9b81606 100644 --- a/capinfos.c +++ b/capinfos.c @@ -85,6 +85,10 @@ #include "wsutil/wsgetopt.h" #endif +#ifdef _WIN32 +#include +#endif /* _WIN32 */ + #include "svnversion.h" /* @@ -802,6 +806,13 @@ main(int argc, char *argv[]) int err; gchar *err_info; int opt; + +#ifdef _WIN32 + WSADATA wsaData; + LPWSTR *wc_argv; + int wc_argc, i; +#endif /* _WIN32 */ + int status = 0; #ifdef HAVE_PLUGINS char* init_progfile_dir_error; @@ -813,6 +824,16 @@ main(int argc, char *argv[]) size_t hash_bytes; #endif +#ifdef _WIN32 + /* Convert our arg list to UTF-8. */ + wc_argv = CommandLineToArgvW(GetCommandLineW(), &wc_argc); + if (wc_argv && wc_argc == argc) { + for (i = 0; i < argc; i++) { + argv[i] = g_utf16_to_utf8(wc_argv[i], -1, NULL, NULL, NULL); + } + } /* XXX else bail because something is horribly, horribly wrong? */ +#endif /* _WIN32 */ + /* * Get credential information for later use. */ diff --git a/dumpcap.c b/dumpcap.c index c17394a7a3..3dc0bf87ac 100644 --- a/dumpcap.c +++ b/dumpcap.c @@ -85,6 +85,7 @@ #include "pcapio.h" #ifdef _WIN32 +#include #include "capture-wpcap.h" #include #endif @@ -3305,6 +3306,8 @@ main(int argc, char *argv[]) #ifdef _WIN32 WSADATA wsaData; + LPWSTR *wc_argv; + int wc_argc; #else struct sigaction action, oldaction; #endif @@ -3326,6 +3329,16 @@ main(int argc, char *argv[]) struct utsname osinfo; #endif +#ifdef _WIN32 + /* Convert our arg list to UTF-8. */ + wc_argv = CommandLineToArgvW(GetCommandLineW(), &wc_argc); + if (wc_argv && wc_argc == argc) { + for (i = 0; i < argc; i++) { + argv[i] = g_utf16_to_utf8(wc_argv[i], -1, NULL, NULL, NULL); + } + } /* XXX else bail because something is horribly, horribly wrong? */ +#endif /* _WIN32 */ + #ifdef _WIN32 /* * Initialize our DLL search path. MUST be called before LoadLibrary diff --git a/editcap.c b/editcap.c index 0c54146401..89ecb33a10 100644 --- a/editcap.c +++ b/editcap.c @@ -49,6 +49,8 @@ #endif #ifdef _WIN32 +#include +#include #include /* getpid */ #ifdef HAVE_WINSOCK2_H #include @@ -813,6 +815,12 @@ main(int argc, char *argv[]) int i, j, err; gchar *err_info; int opt; + +#ifdef _WIN32 + LPWSTR *wc_argv; + int wc_argc; +#endif /* _WIN32 */ + char *p; unsigned int snaplen = 0; /* No limit */ unsigned int choplen = 0; /* No chop */ @@ -838,6 +846,16 @@ main(int argc, char *argv[]) char* init_progfile_dir_error; #endif +#ifdef _WIN32 + /* Convert our arg list to UTF-8. */ + wc_argv = CommandLineToArgvW(GetCommandLineW(), &wc_argc); + if (wc_argv && wc_argc == argc) { + for (i = 0; i < argc; i++) { + argv[i] = g_utf16_to_utf8(wc_argv[i], -1, NULL, NULL, NULL); + } + } /* XXX else bail because something is horribly, horribly wrong? */ +#endif /* _WIN32 */ + /* * Get credential information for later use. */ diff --git a/gtk/main.c b/gtk/main.c index 343708986f..99a3993c27 100644 --- a/gtk/main.c +++ b/gtk/main.c @@ -118,7 +118,6 @@ #include "../capture-wpcap.h" #include "../capture_wpcap_packet.h" #include /* Needed for Unicode */ -#include #include #include #endif /* _WIN32 */ @@ -2098,7 +2097,7 @@ main(int argc, char *argv[]) wc_argv = CommandLineToArgvW(GetCommandLineW(), &wc_argc); if (wc_argv && wc_argc == argc) { for (i = 0; i < argc; i++) { - argv[i] = g_strdup(utf_16to8(wc_argv[i])); + argv[i] = g_utf16_to_utf8(wc_argv[i], -1, NULL, NULL, NULL); } } /* XXX else bail because something is horribly, horribly wrong? */ #endif /* _WIN32 */ diff --git a/mergecap.c b/mergecap.c index 05bb517666..460f938ba9 100644 --- a/mergecap.c +++ b/mergecap.c @@ -41,6 +41,11 @@ #include #endif +#ifdef _WIN32 +#include +#include +#endif /* _WIN32 */ + static int get_natural_int(const char *string, const char *name) { @@ -143,6 +148,12 @@ int main(int argc, char *argv[]) { int opt; + +#ifdef _WIN32 + LPWSTR *wc_argv; + int wc_argc; +#endif /* _WIN32 */ + gboolean do_append = FALSE; gboolean verbose = FALSE; int in_file_count = 0; @@ -162,6 +173,16 @@ main(int argc, char *argv[]) gboolean got_read_error = FALSE, got_write_error = FALSE; int count; +#ifdef _WIN32 + /* Convert our arg list to UTF-8. */ + wc_argv = CommandLineToArgvW(GetCommandLineW(), &wc_argc); + if (wc_argv && wc_argc == argc) { + for (i = 0; i < argc; i++) { + argv[i] = g_utf16_to_utf8(wc_argv[i], -1, NULL, NULL, NULL); + } + } /* XXX else bail because something is horribly, horribly wrong? */ +#endif /* _WIN32 */ + /* Process the options first */ while ((opt = getopt(argc, argv, "hvas:T:F:w:")) != -1) { diff --git a/randpkt.c b/randpkt.c index 941b267643..a9d157ac52 100644 --- a/randpkt.c +++ b/randpkt.c @@ -50,6 +50,11 @@ #include #include "wiretap/wtap.h" +#ifdef _WIN32 +#include +#include +#endif /* _WIN32 */ + #define array_length(x) (sizeof x / sizeof x[0]) /* Types of produceable packets */ @@ -502,12 +507,29 @@ main(int argc, char **argv) guint8 buffer[65536]; int opt; + +#ifdef _WIN32 + LPWSTR *wc_argv; + int wc_argc; +#endif /* _WIN32 */ + + int produce_count = 1000; /* number of pkts to produce */ int produce_type = PKT_ETHERNET; char *produce_filename = NULL; int produce_max_bytes = 5000; pkt_example *example; +#ifdef _WIN32 + /* Convert our arg list to UTF-8. */ + wc_argv = CommandLineToArgvW(GetCommandLineW(), &wc_argc); + if (wc_argv && wc_argc == argc) { + for (i = 0; i < argc; i++) { + argv[i] = g_utf16_to_utf8(wc_argv[i], -1, NULL, NULL, NULL); + } + } /* XXX else bail because something is horribly, horribly wrong? */ +#endif /* _WIN32 */ + while ((opt = getopt(argc, argv, "b:c:ht:")) != -1) { switch (opt) { case 'b': /* max bytes */ diff --git a/rawshark.c b/rawshark.c index a88d6fee5e..27d4d7639d 100644 --- a/rawshark.c +++ b/rawshark.c @@ -117,6 +117,10 @@ #endif /* HAVE_LIBPCAP */ #include "log.h" +#ifdef _WIN32 +#include +#endif /* _WIN32 */ + /* * This is the template for the decode as option; it is shared between the * various functions that output the usage for this parameter. @@ -430,7 +434,9 @@ main(int argc, char *argv[]) gboolean arg_error = FALSE; #ifdef _WIN32 - WSADATA wsaData; + WSADATA wsaData; + LPWSTR *wc_argv; + int wc_argc; #endif /* _WIN32 */ char *gpf_path, *pf_path; @@ -453,6 +459,16 @@ main(int argc, char *argv[]) static const char optstring[] = OPTSTRING_INIT; +#ifdef _WIN32 + /* Convert our arg list to UTF-8. */ + wc_argv = CommandLineToArgvW(GetCommandLineW(), &wc_argc); + if (wc_argv && wc_argc == argc) { + for (i = 0; i < argc; i++) { + argv[i] = g_utf16_to_utf8(wc_argv[i], -1, NULL, NULL, NULL); + } + } /* XXX else bail because something is horribly, horribly wrong? */ +#endif /* _WIN32 */ + /* * Get credential information for later use. */ diff --git a/text2pcap.c b/text2pcap.c index 4b0ee8a236..cb3d3737a0 100644 --- a/text2pcap.c +++ b/text2pcap.c @@ -138,6 +138,11 @@ #include "text2pcap.h" #include "svnversion.h" +#ifdef _WIN32 +#include +#include +#endif /* _WIN32 */ + /*--- Options --------------------------------------------------------------------*/ /* Debug level */ @@ -1108,6 +1113,20 @@ parse_options (int argc, char *argv[]) { int c; char *p; +#ifdef _WIN32 + LPWSTR *wc_argv; + int wc_argc, i; +#endif /* _WIN32 */ + +#ifdef _WIN32 + /* Convert our arg list to UTF-8. */ + wc_argv = CommandLineToArgvW(GetCommandLineW(), &wc_argc); + if (wc_argv && wc_argc == argc) { + for (i = 0; i < argc; i++) { + argv[i] = g_utf16_to_utf8(wc_argv[i], -1, NULL, NULL, NULL); + } + } /* XXX else bail because something is horribly, horribly wrong? */ +#endif /* _WIN32 */ /* Scan CLI parameters */ while ((c = getopt(argc, argv, "dhqe:i:l:m:o:u:s:S:t:T:")) != -1) { @@ -1351,7 +1370,8 @@ parse_options (int argc, char *argv[]) } } -int main(int argc, char *argv[]) +int +main(int argc, char *argv[]) { parse_options(argc, argv); diff --git a/tshark.c b/tshark.c index ac81ba007d..276872e867 100644 --- a/tshark.c +++ b/tshark.c @@ -96,6 +96,7 @@ #ifdef _WIN32 #include "capture-wpcap.h" #include "capture_errs.h" +#include #endif /* _WIN32 */ #include "capture_sync.h" #endif /* HAVE_LIBPCAP */ @@ -765,6 +766,8 @@ main(int argc, char *argv[]) #ifdef _WIN32 WSADATA wsaData; + LPWSTR *wc_argv; + int wc_argc, i; #endif /* _WIN32 */ char *gpf_path, *pf_path; @@ -816,6 +819,16 @@ main(int argc, char *argv[]) static const char optstring[] = OPTSTRING; +#ifdef _WIN32 + /* Convert our arg list to UTF-8. */ + wc_argv = CommandLineToArgvW(GetCommandLineW(), &wc_argc); + if (wc_argv && wc_argc == argc) { + for (i = 0; i < argc; i++) { + argv[i] = g_utf16_to_utf8(wc_argv[i], -1, NULL, NULL, NULL); + } + } /* XXX else bail because something is horribly, horribly wrong? */ +#endif /* _WIN32 */ + /* * Get credential information for later use. */ -- cgit v1.2.3