diff --git a/src/common/util.c b/src/common/util.c index 1d770458f7..12be008745 100644 --- a/src/common/util.c +++ b/src/common/util.c @@ -26,6 +26,7 @@ #include #include #include +#include #else #include #include @@ -2793,3 +2794,17 @@ write_pidfile(char *filename) } } +#ifdef MS_WINDOWS +HANDLE +load_windows_system_library(const TCHAR *library_name) +{ + TCHAR path[MAX_PATH]; + unsigned n; + n = GetSystemDirectory(path, 1024); + if (n == 0 || n + _tcslen(library_name) + 2 >= MAX_PATH) + return 0; + _tcscat(path, TEXT("\\")); + _tcscat(path, library_name); + return LoadLibrary(path); +} +#endif diff --git a/src/common/util.h b/src/common/util.h index 4a31c277e3..833fd904c7 100644 --- a/src/common/util.h +++ b/src/common/util.h @@ -340,6 +340,10 @@ void start_daemon(void); void finish_daemon(const char *desired_cwd); void write_pidfile(char *filename); +#ifdef MS_WINDOWS +HANDLE load_windows_system_library(const TCHAR *library_name); +#endif + const char *libor_get_digests(void); #endif diff --git a/src/test/test_util.c b/src/test/test_util.c index 8a13597978..116d4f5d8d 100644 --- a/src/test/test_util.c +++ b/src/test/test_util.c @@ -1139,6 +1139,19 @@ test_util_listdir(void *ptr) } } +#ifdef MS_WINDOWS +static void +test_util_load_win_lib(void *ptr) +{ + HANDLE h = load_windows_system_library("advapi32.dll"); + + tt_assert(h); + done: + if (h) + CloseHandle(h); +} +#endif + #define UTIL_LEGACY(name) \ { #name, legacy_test_helper, 0, &legacy_setup, test_util_ ## name } @@ -1162,6 +1175,9 @@ struct testcase_t util_tests[] = { UTIL_TEST(find_str_at_start_of_line, 0), UTIL_TEST(asprintf, 0), UTIL_TEST(listdir, 0), +#ifdef MS_WINDOWS + UTIL_TEST(load_win_lib, 0), +#endif END_OF_TESTCASES };