From ac759adb43ee9f84892eb0dce376fee7d074351c Mon Sep 17 00:00:00 2001 From: Nick Mathewson Date: Tue, 7 Dec 2004 05:31:38 +0000 Subject: [PATCH] Make unit tests work on win32 svn:r3094 --- src/or/main.c | 2 +- src/or/or.h | 1 + src/or/test.c | 40 ++++++++++++++++++++++++++++++++++++++-- 3 files changed, 40 insertions(+), 3 deletions(-) diff --git a/src/or/main.c b/src/or/main.c index 58d7efdb38..33383a4c5a 100644 --- a/src/or/main.c +++ b/src/or/main.c @@ -1011,7 +1011,7 @@ static void dumpstats(int severity) { /** Called before we make any calls to network-related functions. * (Some operating systems require their network libraries to be * initialized.) */ -static int network_init(void) +int network_init(void) { #ifdef MS_WINDOWS /* This silly exercise is necessary before windows will allow gethostbyname to work. diff --git a/src/or/or.h b/src/or/or.h index 85d7d54dfc..bfd473de6c 100644 --- a/src/or/or.h +++ b/src/or/or.h @@ -1387,6 +1387,7 @@ int proxy_mode(or_options_t *options); void handle_signals(int is_parent); void tor_cleanup(void); +int network_init(void); int tor_main(int argc, char *argv[]); diff --git a/src/or/test.c b/src/or/test.c index 770518fda7..2fd6eb1bcb 100644 --- a/src/or/test.c +++ b/src/or/test.c @@ -4,6 +4,7 @@ /* $Id$ */ const char test_c_id[] = "$Id$"; +#include "orconfig.h" #include #ifdef HAVE_FCNTL_H #include @@ -12,8 +13,10 @@ const char test_c_id[] = "$Id$"; #ifdef MS_WINDOWS /* For mkdir() */ #include -#endif +#else #include +#endif + #include "or.h" #include "../common/test.h" #include "../common/torgzip.h" @@ -34,10 +37,12 @@ setup_directory(void) int r; if (is_setup) return; - tor_snprintf(temp_dir, sizeof(temp_dir), "/tmp/tor_test_%d", (int) getpid()); #ifdef MS_WINDOWS + // XXXX + tor_snprintf(temp_dir, sizeof(temp_dir), "c:\\windows\\temp\\tor_test_%d", (int)getpid()); r = mkdir(temp_dir); #else + tor_snprintf(temp_dir, sizeof(temp_dir), "/tmp/tor_test_%d", (int) getpid()); r = mkdir(temp_dir, 0700); #endif if (r) { @@ -60,6 +65,35 @@ get_fname(const char *name) static void remove_directory(void) { +#ifdef MS_WINDOWS + char *pattern; + HANDLE handle; + WIN32_FIND_DATA findData; + + setup_directory(); + pattern = tor_malloc(strlen(temp_dir)+16); + tor_snprintf(pattern, strlen(temp_dir)+16, "%s\\*", temp_dir); + handle = FindFirstFile(pattern, &findData); + if (handle == INVALID_HANDLE_VALUE) { + perror("Can't remove"); + return; + } + while(1) { + size_t dlen = strlen(findData.cFileName)+strlen(temp_dir)+16; + char *deleteable = tor_malloc(dlen); + tor_snprintf(deleteable, dlen, "%s\\%s", temp_dir, findData.cFileName); + unlink(deleteable); + tor_free(deleteable); + if (!FindNextFile(handle, &findData)) { + if (GetLastError() != ERROR_NO_MORE_FILES) { + perror("error reading dir"); + } + break; + } + } + FindClose(handle); + tor_free(pattern); +#else DIR *dirp; struct dirent *de; setup_directory(); @@ -78,6 +112,7 @@ remove_directory(void) #endif } closedir(dirp); +#endif rmdir(temp_dir); } @@ -1239,6 +1274,7 @@ test_rend_fns(void) int main(int c, char**v) { or_options_t *options = tor_malloc_zero(sizeof(or_options_t)); + network_init(); options_init(options); set_options(options);