From 1a5400a9e9568add74dac093c71dd59eefc1cb42 Mon Sep 17 00:00:00 2001 From: Erik Faye-Lund Date: Wed, 11 Nov 2020 15:46:14 +0100 Subject: [PATCH] util/u_process: implement util_get_process_name for Windows There's not yet any users of this function on Windows, but it prints a warning during builds, and seems easy enough to implement. So let's add a trivial implementation. Reviewed-by: Jesse Natalie Part-of: --- src/util/process_test.c | 12 ++++++++---- src/util/u_process.c | 17 +++++++++++++++++ 2 files changed, 25 insertions(+), 4 deletions(-) diff --git a/src/util/process_test.c b/src/util/process_test.c index ef7e2b4d4ad..fdd6ee6ba01 100644 --- a/src/util/process_test.c +++ b/src/util/process_test.c @@ -52,10 +52,14 @@ expect_equal_str(const char *expected, const char *actual, const char *test) static void test_util_get_process_name (void) { - #if !DETECT_OS_WINDOWS - const char* name = util_get_process_name(); - expect_equal_str("process_test", name, "util_get_process_name"); - #endif +#if DETECT_OS_WINDOWS + const char *expected = "process_test.exe"; +#else + const char *expected = "process_test"; +#endif + + const char *name = util_get_process_name(); + expect_equal_str(expected, name, "util_get_process_name"); } /* This test gets the real path from Meson (BUILD_FULL_PATH env var), diff --git a/src/util/u_process.c b/src/util/u_process.c index 68fda93a53b..9f847d1cc02 100644 --- a/src/util/u_process.c +++ b/src/util/u_process.c @@ -135,6 +135,23 @@ __getProgramName() } # define GET_PROGRAM_NAME() __getProgramName() +#elif defined(WIN32) +static const char * +__getProgramName() +{ + static const char *progname; + if (progname == NULL) { + static char buf[MAX_PATH]; + GetModuleFileNameA(NULL, buf, sizeof(buf)); + progname = strrchr(buf, '\\'); + if (progname) + progname++; + else + progname = buf; + } + return progname; +} +# define GET_PROGRAM_NAME() __getProgramName() #endif #if !defined(GET_PROGRAM_NAME)