New function to load windows system libraries

This function uses GetSystemDirectory() to make sure we load the version
of the library from c:\windows\system32 (or local equivalent) rather than
whatever version lives in the cwd.
This commit is contained in:
Nick Mathewson 2010-09-21 13:07:11 -04:00
parent fb34c66e83
commit 418e6caeeb
3 changed files with 35 additions and 0 deletions

View File

@ -26,6 +26,7 @@
#include <io.h>
#include <direct.h>
#include <process.h>
#include <tchar.h>
#else
#include <dirent.h>
#include <pwd.h>
@ -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

View File

@ -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

View File

@ -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
};