Commit 8a086f872a3bb2cf8e437f0e374ea18e5cbaa899

Ramsay Jones 2009-06-14T22:12:20

win32: Add support for the MS Visual C/C++ compiler Signed-off-by: Ramsay Jones <ramsay@ramsay1.demon.co.uk>

diff --git a/src/cc-compat.h b/src/cc-compat.h
index 32e4139..4141dd8 100644
--- a/src/cc-compat.h
+++ b/src/cc-compat.h
@@ -30,4 +30,28 @@
 # define GIT_TYPEOF(x)
 #endif
 
+/*
+ * Does our compiler/platform support the C99 <inttypes.h> and
+ * <stdint.h> header files. (C99 requires that <inttypes.h>
+ * includes <stdint.h>).
+ */
+#if !defined(_MSC_VER)
+# define GIT_HAVE_INTTYPES_H 1
+#endif
+
+/* Define the printf format specifer to use for size_t output */
+#if !defined(_MSC_VER)
+# define PRIuZ "zu"
+#else
+# define PRIuZ "Iu"
+#endif
+
+/* Micosoft Visual C/C++ */
+#if defined(_MSC_VER)
+/* no direct support for C99 inline function specifier */
+# define inline __inline
+/* disable "deprecated function" warnings */
+# pragma warning ( disable : 4996 )
+#endif
+
 #endif /* INCLUDE_compat_h__ */
diff --git a/src/common.h b/src/common.h
index 32679a9..d4b9769 100644
--- a/src/common.h
+++ b/src/common.h
@@ -6,11 +6,14 @@
 #endif
 
 #include "git/thread-utils.h"
+#include "cc-compat.h"
 
 #ifdef GIT_HAS_PTHREAD
 # include <pthread.h>
 #endif
-#include <inttypes.h>
+#ifdef GIT_HAVE_INTTYPES_H
+# include <inttypes.h>
+#endif
 #include <assert.h>
 #include <errno.h>
 #include <limits.h>
@@ -26,9 +29,21 @@
 # include <direct.h>
 # include <windows.h>
 
-#define snprintf _snprintf
+# define snprintf _snprintf
 
-typedef int ssize_t;
+# if (defined(_MSC_VER) && defined(_WIN64)) || \
+     (defined(__DMC__) && defined(_M_AMD64))
+  typedef long long ssize_t;
+# else
+  typedef int ssize_t;
+# endif
+
+# if defined(_MSC_VER)
+/* access() mode parameter #defines   */
+#  define F_OK 0  /* existence  check */
+#  define W_OK 2  /* write mode check */
+#  define R_OK 4  /* read  mode check */
+# endif
 
 #else
 
@@ -37,7 +52,6 @@ typedef int ssize_t;
 
 #endif
 
-#include "cc-compat.h"
 #include "git/common.h"
 #include "util.h"
 #include "thread-utils.h"
@@ -45,4 +59,13 @@ typedef int ssize_t;
 
 #define GIT_PATH_MAX 4096
 
+#ifndef GIT_HAVE_INTTYPES_H
+/* add some missing <stdint.h> typedef's */
+typedef long int32_t;
+typedef unsigned long uint32_t;
+
+typedef long long int64_t;
+typedef unsigned long long uint64_t;
+#endif
+
 #endif /* INCLUDE_common_h__ */
diff --git a/src/git/common.h b/src/git/common.h
index 75e1e84..c470e0e 100644
--- a/src/git/common.h
+++ b/src/git/common.h
@@ -21,7 +21,11 @@
 #endif
 
 /** Declare a function as always inlined. */
+#if defined(_MSC_VER)
+# define GIT_INLINE(type) static __inline type
+#else
 # define GIT_INLINE(type) static inline type
+#endif
 
 /** Declare a function's takes printf style arguments. */
 #ifdef __GNUC__
diff --git a/src/odb.c b/src/odb.c
index ea28d01..6d646a4 100644
--- a/src/odb.c
+++ b/src/odb.c
@@ -153,7 +153,7 @@ int git_obj__loose_object_type(git_otype type)
 static int format_object_header(char *hdr, size_t n, git_obj *obj)
 {
 	const char *type_str = git_obj_type_to_string(obj->type);
-	int len = snprintf(hdr, n, "%s %zu", type_str, obj->len);
+	int len = snprintf(hdr, n, "%s %"PRIuZ, type_str, obj->len);
 
 	assert(len > 0);  /* otherwise snprintf() is broken */
 	assert(len < n);  /* otherwise the caller is broken! */