Commit a6d7e166344cb0d9aa5ecca037a975f9f19e64f1

Vicent Marti 2014-07-11T16:51:43

Merge pull request #2466 from jacquesg/win2003-platform-sdk Windows compatibility fixes

diff --git a/src/netops.c b/src/netops.c
index 8a60299..fceb4fb 100644
--- a/src/netops.c
+++ b/src/netops.c
@@ -13,6 +13,7 @@
 #	include <netinet/in.h>
 #       include <arpa/inet.h>
 #else
+#	include <winsock2.h>
 #	include <ws2tcpip.h>
 #	ifdef _MSC_VER
 #		pragma comment(lib, "ws2_32")
diff --git a/src/strnlen.h b/src/strnlen.h
index fdd7fe3..eecfe3c 100644
--- a/src/strnlen.h
+++ b/src/strnlen.h
@@ -7,7 +7,8 @@
 #ifndef INCLUDE_strlen_h__
 #define INCLUDE_strlen_h__
 
-#if defined(__MINGW32__) || defined(__sun) || defined(__APPLE__) || defined(__MidnightBSD__)
+#if defined(__MINGW32__) || defined(__sun) || defined(__APPLE__) || defined(__MidnightBSD__) ||\
+	(defined(_MSC_VER) && _MSC_VER < 1500)
 #   define NO_STRNLEN
 #endif
 
diff --git a/src/trace.h b/src/trace.h
index 4d4e3bf..486084d 100644
--- a/src/trace.h
+++ b/src/trace.h
@@ -46,8 +46,16 @@ GIT_INLINE(void) git_trace__write_fmt(
 
 #else
 
+GIT_INLINE(void) git_trace__null(
+	git_trace_level_t level,
+	const char *fmt, ...)
+{
+	GIT_UNUSED(level);
+	GIT_UNUSED(fmt);
+}
+
 #define git_trace_level()		((void)0)
-#define git_trace(lvl, ...)		((void)0)
+#define git_trace			git_trace__null
 
 #endif
 
diff --git a/src/util.c b/src/util.c
index f9d37e4..5c30595 100644
--- a/src/util.c
+++ b/src/util.c
@@ -613,7 +613,8 @@ void git__qsort_r(
 	defined(__OpenBSD__) || defined(__NetBSD__) || \
 	defined(__gnu_hurd__) || defined(__ANDROID_API__) || \
 	defined(__sun) || defined(__CYGWIN__) || \
-	(__GLIBC__ == 2 && __GLIBC_MINOR__ < 8)
+	(__GLIBC__ == 2 && __GLIBC_MINOR__ < 8) || \
+	(defined(_MSC_VER) && _MSC_VER < 1500)
 	git__insertsort_r(els, nel, elsize, NULL, cmp, payload);
 #elif defined(GIT_WIN32)
 	git__qsort_r_glue glue = { cmp, payload };
diff --git a/src/win32/msvc-compat.h b/src/win32/msvc-compat.h
index 50865ed..fa4e291 100644
--- a/src/win32/msvc-compat.h
+++ b/src/win32/msvc-compat.h
@@ -15,7 +15,7 @@
 #	define R_OK 4 /* read mode check */
 
 #	define lseek _lseeki64
-#	define stat _stat64
+#	define stat __stat64
 #	define fstat _fstat64
 
 /* stat: file mode type testing macros */
@@ -38,7 +38,7 @@
 typedef SSIZE_T ssize_t;
 
 /* define snprintf using variadic macro support if available */
-#if _MSC_VER >= 1400
+#if _MSC_VER >= 1500
 # define snprintf(BUF, SZ, FMT, ...) _snprintf_s(BUF, SZ, _TRUNCATE, FMT, __VA_ARGS__)
 #else
 # define snprintf _snprintf
diff --git a/src/win32/posix.h b/src/win32/posix.h
index 2cbea18..22ea6a5 100644
--- a/src/win32/posix.h
+++ b/src/win32/posix.h
@@ -19,7 +19,7 @@
 # define EAFNOSUPPORT (INT_MAX-1)
 #endif
 
-#ifdef _MSC_VER
+#if defined(_MSC_VER) && _MSC_VER >= 1500
 # define p_ftruncate(fd, sz) _chsize_s(fd, sz)
 #else  /* MinGW */
 # define p_ftruncate(fd, sz) _chsize(fd, sz)
diff --git a/src/win32/posix_w32.c b/src/win32/posix_w32.c
index fbadb1c..a74fcaa 100644
--- a/src/win32/posix_w32.c
+++ b/src/win32/posix_w32.c
@@ -19,6 +19,10 @@
 # define FILE_NAME_NORMALIZED 0
 #endif
 
+#ifndef IO_REPARSE_TAG_SYMLINK
+#define IO_REPARSE_TAG_SYMLINK (0xA000000CL)
+#endif
+
 /* Options which we always provide to _wopen.
  *
  * _O_BINARY - Raw access; no translation of CR or LF characters
@@ -543,7 +547,7 @@ char *p_realpath(const char *orig_path, char *buffer)
 
 int p_vsnprintf(char *buffer, size_t count, const char *format, va_list argptr)
 {
-#ifdef _MSC_VER
+#if defined(_MSC_VER) && _MSC_VER >= 1500
 	int len;
 
 	if (count == 0 ||
@@ -570,7 +574,7 @@ int p_snprintf(char *buffer, size_t count, const char *format, ...)
 
 int p_mkstemp(char *tmp_path)
 {
-#if defined(_MSC_VER)
+#if defined(_MSC_VER) && _MSC_VER >= 1500
 	if (_mktemp_s(tmp_path, strlen(tmp_path) + 1) != 0)
 		return -1;
 #else