From 0cafdeb6f53370877a74fa4687bcaf1b269396a5 Mon Sep 17 00:00:00 2001
From: Nick Mathewson <nickm@torproject.org>
Date: Mon, 12 May 2008 17:16:47 +0000
Subject: [PATCH] Tweaks to make unit tests fail less badly on mingw on trunk.

svn:r814
---
 evutil.c            |  2 +-
 test/regress.c      |  9 ++++++++-
 test/regress_http.c | 20 +++++++++++++++-----
 3 files changed, 24 insertions(+), 7 deletions(-)

diff --git a/evutil.c b/evutil.c
index 35ec495e..666b6618 100644
--- a/evutil.c
+++ b/evutil.c
@@ -232,7 +232,7 @@ evutil_snprintf(char *buf, size_t buflen, const char *format, ...)
 int
 evutil_vsnprintf(char *buf, size_t buflen, const char *format, va_list ap)
 {
-#ifdef WIN32
+#ifdef _MSC_VER
 	int r = _vsnprintf(buf, buflen, format, ap);
 	buf[buflen-1] = '\0';
 	if (r >= 0)
diff --git a/test/regress.c b/test/regress.c
index 8b30727c..08cea7db 100644
--- a/test/regress.c
+++ b/test/regress.c
@@ -2105,6 +2105,7 @@ test_methods(void)
 	struct event_config *cfg;
 	struct event_base *base;
 	const char *backend;
+	int n_methods = 0;
 
 	fprintf(stderr, "Testing supported methods: ");
 
@@ -2117,6 +2118,12 @@ test_methods(void)
 	while (*methods != NULL) {
 		fprintf(stderr, "%s ", *methods);
 		++methods;
+		++n_methods;
+	}
+
+	if (n_methods == 1) {
+		/* only one method supported; can't continue. */
+		goto done;
 	}
 
 	cfg = event_config_new();
@@ -2137,7 +2144,7 @@ test_methods(void)
 
 	event_base_free(base);
 	event_config_free(cfg);
-
+done:
 	fprintf(stderr, "OK\n");
 }
 
diff --git a/test/regress_http.c b/test/regress_http.c
index 8971eca1..b63761e7 100644
--- a/test/regress_http.c
+++ b/test/regress_http.c
@@ -153,8 +153,15 @@ http_connect(const char *address, u_short port)
 
 	evutil_make_socket_nonblocking(fd);
 	if (connect(fd, sa, slen) == -1) {
+#ifdef WIN32
+		int tmp_err = WSAGetLastError();
+		if (tmp_err != WSAEINPROGRESS && tmp_err != WSAEINVAL &&
+		    tmp_err != WSAEWOULDBLOCK)
+			event_err(1, "connect failed");
+#else
 		if (errno != EINPROGRESS)
 			event_err(1, "connect failed");
+#endif
 	}
 
 #ifndef WIN32
@@ -1451,6 +1458,9 @@ http_incomplete_errorcb(struct bufferevent *bev, short what, void *arg)
 static void
 http_incomplete_writecb(struct bufferevent *bev, void *arg)
 {
+#ifndef SHUT_WR
+#define SHUT_WR 1
+#endif
 	if (arg != NULL) {
 		int fd = *(int *)arg;
 		/* terminate the write side to simulate EOF */
@@ -1497,7 +1507,7 @@ http_incomplete_test(int use_timeout)
 	event_dispatch();
 
 	gettimeofday(&tv_end, NULL);
-	timersub(&tv_end, &tv_start, &tv_end);
+	evutil_timersub(&tv_end, &tv_start, &tv_end);
 
 	if (use_timeout) {
 		bufferevent_free(bev);
@@ -1694,7 +1704,7 @@ http_chunked_test(void)
 	event_dispatch();
 
 	gettimeofday(&tv_end, NULL);
-	timersub(&tv_end, &tv_start, &tv_end);
+	evutil_timersub(&tv_end, &tv_start, &tv_end);
 
 	if (tv_end.tv_sec >= 1) {
 		fprintf(stdout, "FAILED (time)\n");
@@ -1815,7 +1825,7 @@ http_connection_retry(void)
 	gettimeofday(&tv_start, NULL);
 	event_dispatch();
 	gettimeofday(&tv_end, NULL);
-	timersub(&tv_end, &tv_start, &tv_end);
+	evutil_timersub(&tv_end, &tv_start, &tv_end);
 	if (tv_end.tv_sec >= 1) {
 		fprintf(stdout, "FAILED (time)\n");
 		exit(1);
@@ -1852,7 +1862,7 @@ http_connection_retry(void)
 	gettimeofday(&tv_start, NULL);
 	event_dispatch();
 	gettimeofday(&tv_end, NULL);
-	timersub(&tv_end, &tv_start, &tv_end);
+	evutil_timersub(&tv_end, &tv_start, &tv_end);
 	if (tv_end.tv_sec <= 1 || tv_end.tv_sec >= 6) {
 		fprintf(stdout, "FAILED (time)\n");
 		exit(1);
@@ -1898,7 +1908,7 @@ http_connection_retry(void)
 	event_dispatch();
 	gettimeofday(&tv_end, NULL);
 
-	timersub(&tv_end, &tv_start, &tv_end);
+	evutil_timersub(&tv_end, &tv_start, &tv_end);
 	if (tv_end.tv_sec <= 1 || tv_end.tv_sec >= 6) {
 		fprintf(stdout, "FAILED (time)\n");
 		exit(1);
-- 
2.40.0