In msvc.h, there's a couple of stat related functions defined diffently from mingw.h. When we remove these definitions, the only problem we get is "warning C4005: '_stati64' : macro redefinition" for this line in mingw.h: #define _stati64(x,y) mingw_stat(x,y) The reason is that as of MSVCR80.dll (distributed with MSVC 2005), the original _stati64 family of functions was renamed to _stat32i64, and the former function names became macros (pointing to the appropriate function based on the definition of _USE_32BIT_TIME_T). Defining _stati64 works on MinGW because MinGW by default compiles against the MSVCRT.DLL that is part of Windows (i.e. _stati64 is a function rather than a macro). Note: MinGW *can* compile for newer MSVC runtime versions, and MSVC apparently can also compile for the Windows MSVCRT.DLL via the DDK (see http://www.syndicateofideas.com/posts/fighting-the-msvcrt-dll-hell ). Remove the stat definitions from msvc.h, as they are not compiler related. In mingw.h, determine the runtime version in use from the definitions of _stati64 and _USE_32BIT_TIME_T, and define stat() accordingly. This also fixes that stat() in MSVC builds still resolves to mingw_lstat() instead of mingw_stat(). Signed-off-by: Karsten Blees <blees@dcon.de> Acked-by: Sebastian Schuberth <sschuberth@gmail.com> Signed-off-by: Junio C Hamano <gitster@pobox.com>
		
			
				
	
	
		
			30 lines
		
	
	
		
			570 B
		
	
	
	
		
			C
		
	
	
	
	
	
			
		
		
	
	
			30 lines
		
	
	
		
			570 B
		
	
	
	
		
			C
		
	
	
	
	
	
#ifndef __MSVC__HEAD
 | 
						|
#define __MSVC__HEAD
 | 
						|
 | 
						|
#include <direct.h>
 | 
						|
#include <process.h>
 | 
						|
#include <malloc.h>
 | 
						|
#include <io.h>
 | 
						|
 | 
						|
/* porting function */
 | 
						|
#define inline __inline
 | 
						|
#define __inline__ __inline
 | 
						|
#define __attribute__(x)
 | 
						|
#define strncasecmp  _strnicmp
 | 
						|
#define ftruncate    _chsize
 | 
						|
#define strtoull     _strtoui64
 | 
						|
#define strtoll      _strtoi64
 | 
						|
 | 
						|
static __inline int strcasecmp (const char *s1, const char *s2)
 | 
						|
{
 | 
						|
	int size1 = strlen(s1);
 | 
						|
	int sisz2 = strlen(s2);
 | 
						|
	return _strnicmp(s1, s2, sisz2 > size1 ? sisz2 : size1);
 | 
						|
}
 | 
						|
 | 
						|
#undef ERROR
 | 
						|
 | 
						|
#include "compat/mingw.h"
 | 
						|
 | 
						|
#endif
 |