summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorNick Mathewson <nickm@torproject.org>2004-12-07 05:31:38 +0000
committerNick Mathewson <nickm@torproject.org>2004-12-07 05:31:38 +0000
commitac759adb43ee9f84892eb0dce376fee7d074351c (patch)
tree0ffde9146160d3e281d5ba7e049260147e4e9f83
parentc3c6873945b0722c4f95f9d0265ddd51e269c645 (diff)
downloadtor-ac759adb43ee9f84892eb0dce376fee7d074351c.tar.gz
tor-ac759adb43ee9f84892eb0dce376fee7d074351c.zip
Make unit tests work on win32
svn:r3094
-rw-r--r--src/or/main.c2
-rw-r--r--src/or/or.h1
-rw-r--r--src/or/test.c40
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 <stdio.h>
#ifdef HAVE_FCNTL_H
#include <fcntl.h>
@@ -12,8 +13,10 @@ const char test_c_id[] = "$Id$";
#ifdef MS_WINDOWS
/* For mkdir() */
#include <direct.h>
-#endif
+#else
#include <dirent.h>
+#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);