diff --git a/src/cc-compat.h b/src/cc-compat.h index 32e41390c..4141dd83e 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 and + * header files. (C99 requires that + * includes ). + */ +#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 32679a954..d4b976905 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 #endif -#include +#ifdef GIT_HAVE_INTTYPES_H +# include +#endif #include #include #include @@ -26,9 +29,21 @@ # include # include -#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 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 75e1e84d1..c470e0e0a 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 ea28d017c..6d646a4dd 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! */