diff options
author | Nick Mathewson <nickm@torproject.org> | 2010-09-27 15:42:08 -0400 |
---|---|---|
committer | Nick Mathewson <nickm@torproject.org> | 2010-09-27 15:42:08 -0400 |
commit | 501399d14ac2e2566592946f8d73f26c34ae9150 (patch) | |
tree | 998c1bf50a8ab1feb792575481951c3f5a87d2c2 /src | |
parent | 26811a8e2d23cc248dc40095bbd6e0e00af08c1c (diff) | |
parent | e3859615429ec8d3939e21cd65fa07cc56bb5d0c (diff) | |
download | tor-501399d14ac2e2566592946f8d73f26c34ae9150.tar.gz tor-501399d14ac2e2566592946f8d73f26c34ae9150.zip |
Merge remote branch 'origin/maint-0.2.2'
Diffstat (limited to 'src')
-rw-r--r-- | src/common/util.c | 15 | ||||
-rw-r--r-- | src/common/util.h | 4 | ||||
-rw-r--r-- | src/or/eventdns.c | 3 | ||||
-rw-r--r-- | src/or/ntmain.c | 3 | ||||
-rw-r--r-- | src/test/test_util.c | 16 |
5 files changed, 37 insertions, 4 deletions
diff --git a/src/common/util.c b/src/common/util.c index abb2753c6e..b4f3052e19 100644 --- a/src/common/util.c +++ b/src/common/util.c @@ -26,6 +26,7 @@ #include <io.h> #include <direct.h> #include <process.h> +#include <tchar.h> #else #include <dirent.h> #include <pwd.h> @@ -2862,3 +2863,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, MAX_PATH); + 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/or/eventdns.c b/src/or/eventdns.c index 8ebfb79353..b929303fd5 100644 --- a/src/or/eventdns.c +++ b/src/or/eventdns.c @@ -3131,8 +3131,7 @@ load_nameservers_with_getnetworkparams(void) IP_ADDR_STRING *ns; GetNetworkParams_fn_t fn; - /* XXXX Possibly, we should hardcode the location of this DLL. */ - if (!(handle = LoadLibrary(TEXT("iphlpapi.dll")))) { + if (!(handle = load_windows_system_library(TEXT("iphlpapi.dll")))) { log(EVDNS_LOG_WARN, "Could not open iphlpapi.dll"); /* right now status = 0, doesn't that mean "good" - mikec */ status = -1; diff --git a/src/or/ntmain.c b/src/or/ntmain.c index 0b611f0bf1..46e7afb78b 100644 --- a/src/or/ntmain.c +++ b/src/or/ntmain.c @@ -138,8 +138,7 @@ nt_service_loadlibrary(void) if (service_fns.loaded) return; - /* XXXX Possibly, we should hardcode the location of this DLL. */ - if (!(library = LoadLibrary(TEXT("advapi32.dll")))) { + if (!(library = load_windows_system_library(TEXT("advapi32.dll")))) { log_err(LD_GENERAL, "Couldn't open advapi32.dll. Are you trying to use " "NT services on Windows 98? That doesn't work."); goto err; diff --git a/src/test/test_util.c b/src/test/test_util.c index d90927b35f..a14d548b8e 100644 --- a/src/test/test_util.c +++ b/src/test/test_util.c @@ -1195,6 +1195,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 } @@ -1218,6 +1231,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 }; |