From aba59e5973af5e8b2e0705bba3c8f2d47791261b Mon Sep 17 00:00:00 2001 From: Gerald Combs Date: Tue, 9 Oct 2018 08:44:54 -0700 Subject: [PATCH] Win32: Make extcap utilities console applications. Switch from using WinMain in extcap to wmain. Change-Id: I54fafad598f5ff74fe84a3ce3e993ac5a31188f7 Reviewed-on: https://code.wireshark.org/review/30094 Reviewed-by: Gerald Combs Petri-Dish: Gerald Combs Tested-by: Petri Dish Buildbot Reviewed-by: Anders Broman --- extcap/.editorconfig | 2 +- extcap/CMakeLists.txt | 14 ++++++------- extcap/androiddump.c | 22 +++++++++++--------- extcap/ciscodump.c | 22 +++++++++++--------- extcap/extcap-base.c | 47 ------------------------------------------- extcap/extcap-base.h | 6 +----- extcap/randpktdump.c | 24 ++++++++++++---------- extcap/sshdump.c | 22 +++++++++++--------- extcap/udpdump.c | 21 +++++++++++-------- 9 files changed, 74 insertions(+), 106 deletions(-) diff --git a/extcap/.editorconfig b/extcap/.editorconfig index fa8c8081f8..fdb4526bce 100644 --- a/extcap/.editorconfig +++ b/extcap/.editorconfig @@ -4,6 +4,6 @@ # http://editorconfig.org/ # -[{extcap-base,randpktdump,ssh-base,sshdump}.[ch]] +[{ciscodump,extcap-base,randpktdump,ssh-base,sshdump,udpdump}.[ch]] indent_style = tab indent_size = tab diff --git a/extcap/CMakeLists.txt b/extcap/CMakeLists.txt index de90d1d6d5..3035b53206 100644 --- a/extcap/CMakeLists.txt +++ b/extcap/CMakeLists.txt @@ -96,7 +96,7 @@ if(BUILD_androiddump) ) set_executable_resources(androiddump "Androiddump") - add_executable(androiddump WIN32 ${androiddump_FILES}) + add_executable(androiddump ${androiddump_FILES}) # XXX Shouldn't we add wsutil to androiddump_LIBS instead? set_extcap_executable_properties(androiddump) target_link_libraries(androiddump ${androiddump_LIBS}) @@ -118,7 +118,7 @@ if(BUILD_sshdump AND LIBSSH_FOUND) ) set_executable_resources(sshdump "Sshdump") - add_executable(sshdump WIN32 ${sshdump_FILES}) + add_executable(sshdump ${sshdump_FILES}) set_extcap_executable_properties(sshdump) target_link_libraries(sshdump ${sshdump_LIBS}) target_include_directories(sshdump PUBLIC ${LIBSSH_INCLUDE_DIR}) @@ -143,7 +143,7 @@ if(BUILD_ciscodump AND LIBSSH_FOUND) ) set_executable_resources(ciscodump "Ciscodump") - add_executable(ciscodump WIN32 ${ciscodump_FILES}) + add_executable(ciscodump ${ciscodump_FILES}) set_extcap_executable_properties(ciscodump) target_link_libraries(ciscodump ${ciscodump_LIBS}) target_include_directories(ciscodump PUBLIC ${LIBSSH_INCLUDE_DIR}) @@ -167,7 +167,7 @@ if(BUILD_dpauxmon AND HAVE_LIBNL3) ) set_executable_resources(dpauxmon "dpauxmon") - add_executable(dpauxmon WIN32 ${dpauxmon_FILES}) + add_executable(dpauxmon ${dpauxmon_FILES}) set_extcap_executable_properties(dpauxmon) target_link_libraries(dpauxmon ${dpauxmon_LIBS}) target_include_directories(dpauxmon PUBLIC ${NL_INCLUDE_DIR}) @@ -190,7 +190,7 @@ if(BUILD_udpdump) ) set_executable_resources(udpdump "udpdump") - add_executable(udpdump WIN32 ${udpdump_FILES}) + add_executable(udpdump ${udpdump_FILES}) set_extcap_executable_properties(udpdump) target_link_libraries(udpdump ${udpdump_LIBS}) install(TARGETS udpdump RUNTIME DESTINATION ${EXTCAP_INSTALL_LIBDIR}) @@ -212,7 +212,7 @@ if(BUILD_randpktdump) ) set_executable_resources(randpktdump "randpktdump") - add_executable(randpktdump WIN32 ${randpktdump_FILES}) + add_executable(randpktdump ${randpktdump_FILES}) # XXX Shouldn't we add wsutil to randpktdump_LIBS instead? set_extcap_executable_properties(randpktdump) target_link_libraries(randpktdump ${randpktdump_LIBS}) @@ -237,7 +237,7 @@ if(BUILD_sdjournal AND SYSTEMD_FOUND) ) set_executable_resources(sdjournal "sdjournal") - add_executable(sdjournal WIN32 ${sdjournal_FILES}) + add_executable(sdjournal ${sdjournal_FILES}) set_extcap_executable_properties(sdjournal) target_link_libraries(sdjournal ${sdjournal_LIBS}) install(TARGETS sdjournal RUNTIME DESTINATION ${EXTCAP_INSTALL_LIBDIR}) diff --git a/extcap/androiddump.c b/extcap/androiddump.c index b1d5bbd6e2..858968911a 100644 --- a/extcap/androiddump.c +++ b/extcap/androiddump.c @@ -2485,7 +2485,7 @@ static int capture_android_tcpdump(char *interface, char *fifo, return EXIT_CODE_SUCCESS; } -int main(int argc, char **argv) { +int real_main(int argc, char **argv) { int ret = EXIT_CODE_GENERIC; int option_idx = 0; int result; @@ -2512,8 +2512,6 @@ int main(int argc, char **argv) { #ifdef _WIN32 WSADATA wsaData; - - attach_parent_console(); #endif /* _WIN32 */ cmdarg_err_init(failure_warning_message, failure_warning_message); @@ -2753,13 +2751,19 @@ end: } #ifdef _WIN32 -int _stdcall -WinMain (struct HINSTANCE__ *hInstance, - struct HINSTANCE__ *hPrevInstance, - char *lpszCmdLine, - int nCmdShow) +int +wmain(int argc, wchar_t *wc_argv[]) { - return main(__argc, __argv); + char **argv; + + argv = arg_list_utf_16to8(argc, wc_argv); + return real_main(argc, argv); +} +#else +int +main(int argc, char *argv[]) +{ + return real_main(argc, argv); } #endif diff --git a/extcap/ciscodump.c b/extcap/ciscodump.c index 9f2eed5b8f..5ec4fbe74f 100644 --- a/extcap/ciscodump.c +++ b/extcap/ciscodump.c @@ -510,7 +510,7 @@ static int list_config(char *interface, unsigned int remote_port) return EXIT_SUCCESS; } -int main(int argc, char **argv) +int real_main(int argc, char **argv) { int result; int option_idx = 0; @@ -530,8 +530,6 @@ int main(int argc, char **argv) #ifdef _WIN32 WSADATA wsaData; - - attach_parent_console(); #endif /* _WIN32 */ help_url = data_file_url("ciscodump.html"); @@ -710,13 +708,19 @@ end: } #ifdef _WIN32 -int _stdcall -WinMain (struct HINSTANCE__ *hInstance, - struct HINSTANCE__ *hPrevInstance, - char *lpszCmdLine, - int nCmdShow) +int +wmain(int argc, wchar_t *wc_argv[]) { - return main(__argc, __argv); + char **argv; + + argv = arg_list_utf_16to8(argc, wc_argv); + return real_main(argc, argv); +} +#else +int +main(int argc, char *argv[]) +{ + return real_main(argc, argv); } #endif diff --git a/extcap/extcap-base.c b/extcap/extcap-base.c index 7d47aa41e5..bf34d39326 100644 --- a/extcap/extcap-base.c +++ b/extcap/extcap-base.c @@ -49,53 +49,6 @@ typedef struct _extcap_option { FILE* custom_log = NULL; -#ifdef _WIN32 -BOOLEAN IsHandleRedirected(DWORD handle) -{ - HANDLE h = GetStdHandle(handle); - if (h) { - BY_HANDLE_FILE_INFORMATION fi; - if (GetFileInformationByHandle(h, &fi)) { - return TRUE; - } - } - return FALSE; -} - -void attach_parent_console() -{ - BOOL outRedirected, errRedirected; - - outRedirected = IsHandleRedirected(STD_OUTPUT_HANDLE); - errRedirected = IsHandleRedirected(STD_ERROR_HANDLE); - - if (outRedirected && errRedirected) { - /* Both standard output and error handles are redirected. - * There is no point in attaching to parent process console. - */ - return; - } - - if (AttachConsole(ATTACH_PARENT_PROCESS) == 0) { - /* Console attach failed. */ - return; - } - - /* Console attach succeeded */ - if (outRedirected == FALSE) { - if (!freopen("CONOUT$", "w", stdout)) { - g_warning("Cannot redirect to stdout."); - } - } - - if (errRedirected == FALSE) { - if (!freopen("CONOUT$", "w", stderr)) { - g_warning("Cannot redirect to strerr."); - } - } -} -#endif - void extcap_base_register_interface(extcap_parameters * extcap, const char * interface, const char * ifdescription, uint16_t dlt, const char * dltdescription ) { extcap_base_register_interface_ext(extcap, interface, ifdescription, dlt, NULL, dltdescription ); diff --git a/extcap/extcap-base.h b/extcap/extcap-base.h index 9413bf931f..322d08a9ab 100644 --- a/extcap/extcap-base.h +++ b/extcap/extcap-base.h @@ -29,6 +29,7 @@ #ifdef _WIN32 #include + #include // arg_list_utf_16to8 #endif #include @@ -58,11 +59,6 @@ { "debug", required_argument, NULL, EXTCAP_OPT_DEBUG}, \ { "debug-file", required_argument, NULL, EXTCAP_OPT_DEBUG_FILE} -#if defined(_WIN32) - BOOLEAN IsHandleRedirected(DWORD handle); - void attach_parent_console(); -#endif - typedef struct _extcap_parameters { char * exename; diff --git a/extcap/randpktdump.c b/extcap/randpktdump.c index 4fa76e3526..f7639dcb57 100644 --- a/extcap/randpktdump.c +++ b/extcap/randpktdump.c @@ -119,7 +119,7 @@ static int list_config(char *interface) return EXIT_SUCCESS; } -int main(int argc, char *argv[]) +int real_main(int argc, char *argv[]) { int option_idx = 0; int result; @@ -172,10 +172,6 @@ int main(int argc, char *argv[]) goto end; } -#ifdef _WIN32 - attach_parent_console(); -#endif /* _WIN32 */ - while ((result = getopt_long(argc, argv, ":", longopts, &option_idx)) != -1) { switch (result) { case OPT_VERSION: @@ -323,13 +319,19 @@ end: } #ifdef _WIN32 -int _stdcall -WinMain (struct HINSTANCE__ *hInstance, - struct HINSTANCE__ *hPrevInstance, - char *lpszCmdLine, - int nCmdShow) +int +wmain(int argc, wchar_t *wc_argv[]) { - return main(__argc, __argv); + char **argv; + + argv = arg_list_utf_16to8(argc, wc_argv); + return real_main(argc, argv); +} +#else +int +main(int argc, char *argv[]) +{ + return real_main(argc, argv); } #endif diff --git a/extcap/sshdump.c b/extcap/sshdump.c index 6a09057a53..3a3e710e58 100644 --- a/extcap/sshdump.c +++ b/extcap/sshdump.c @@ -324,7 +324,7 @@ static char* concat_filters(const char* extcap_filter, const char* remote_filter return g_strdup_printf("(%s) and (%s)", extcap_filter, remote_filter); } -int main(int argc, char **argv) +int real_main(int argc, char **argv) { int result; int option_idx = 0; @@ -347,8 +347,6 @@ int main(int argc, char **argv) #ifdef _WIN32 WSADATA wsaData; - - attach_parent_console(); #endif /* _WIN32 */ help_url = data_file_url("sshdump.html"); @@ -534,13 +532,19 @@ end: } #ifdef _WIN32 -int _stdcall -WinMain (struct HINSTANCE__ *hInstance, - struct HINSTANCE__ *hPrevInstance, - char *lpszCmdLine, - int nCmdShow) +int +wmain(int argc, wchar_t *wc_argv[]) { - return main(__argc, __argv); + char **argv; + + argv = arg_list_utf_16to8(argc, wc_argv); + return real_main(argc, argv); +} +#else +int +main(int argc, char *argv[]) +{ + return real_main(argc, argv); } #endif diff --git a/extcap/udpdump.c b/extcap/udpdump.c index 121b3c4816..ac74f2421b 100644 --- a/extcap/udpdump.c +++ b/extcap/udpdump.c @@ -354,7 +354,7 @@ static void run_listener(const char* fifo, const guint16 port, const char* proto g_free(buf); } -int main(int argc, char *argv[]) +int real_main(int argc, char *argv[]) { int option_idx = 0; int result; @@ -367,7 +367,6 @@ int main(int argc, char *argv[]) char* port_msg = NULL; #ifdef _WIN32 WSADATA wsaData; - attach_parent_console(); #endif /* _WIN32 */ help_url = data_file_url("udpdump.html"); @@ -477,13 +476,19 @@ end: } #ifdef _WIN32 -int _stdcall -WinMain (struct HINSTANCE__ *hInstance, - struct HINSTANCE__ *hPrevInstance, - char *lpszCmdLine, - int nCmdShow) +int +wmain(int argc, wchar_t *wc_argv[]) { - return main(__argc, __argv); + char **argv; + + argv = arg_list_utf_16to8(argc, wc_argv); + return real_main(argc, argv); +} +#else +int +main(int argc, char *argv[]) +{ + return real_main(argc, argv); } #endif