]> git.ipfire.org Git - thirdparty/tor.git/commitdiff
Make unit tests work on win32
authorNick Mathewson <nickm@torproject.org>
Tue, 7 Dec 2004 05:31:38 +0000 (05:31 +0000)
committerNick Mathewson <nickm@torproject.org>
Tue, 7 Dec 2004 05:31:38 +0000 (05:31 +0000)
svn:r3094

src/or/main.c
src/or/or.h
src/or/test.c

index 58d7efdb38b1a77dabc6e6982574734bfa5fa40f..33383a4c5a71f99470fa0dfde30f05dcec83a67b 100644 (file)
@@ -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.
index 85d7d54dfc3f7e3f7e7d40a4e7a6e166aa72f56c..bfd473de6c484fba685599583eb16b05d0015c2b 100644 (file)
@@ -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[]);
 
index 770518fda7097c09616e816239efa27bf069c0be..2fd6eb1bcbad67c9cf97e3f206d0aa3e3a901340 100644 (file)
@@ -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);