Commit 418e6cae authored by Nick Mathewson's avatar Nick Mathewson 🐚
Browse files

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.
parent fb34c66e
Loading
Loading
Loading
Loading
+15 −0
Original line number Diff line number Diff line
@@ -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
+4 −0
Original line number Diff line number Diff line
@@ -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
+16 −0
Original line number Diff line number Diff line
@@ -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
};