In particular, the following warning is issued while compiling
compat/msvc.c:
...mingw.c(223) : warning C4133: 'function' : incompatible \
types - from '_stati64 *' to '_stat64 *'
which relates to a call of _fstati64() in the mingw_fstat()
function definition.
This is caused by various layers of macro magic and attempts to
avoid macro redefinition compiler warnings. For example, the call
to _fstati64() mentioned above is actually a call to _fstat64(),
and expects a pointer to a struct _stat64 rather than the struct
_stati64 which is passed to mingw_fstat().
The definition of struct _stati64 given in compat/msvc.h had the
same "shape" as the definition of struct _stat64, so the call to
_fstat64() does not actually cause any runtime errors, but the
structure types are indeed incompatible.
In order to avoid the compiler warning, we add declarations for the
mingw_lstat() and mingw_fstat() functions and supporting macros to
msvc.h, suppressing the corresponding declarations in mingw.h, so
that we can use the appropriate structure type (and function) names
from the msvc headers.
Signed-off-by: Ramsay Jones <ramsay@ramsay1.demon.co.uk>
Signed-off-by: Johannes Sixt <j6t@kdbg.org>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
43 lines
1.1 KiB
C
43 lines
1.1 KiB
C
#ifndef __MSVC__HEAD
|
|
#define __MSVC__HEAD
|
|
|
|
#include <direct.h>
|
|
#include <process.h>
|
|
#include <malloc.h>
|
|
|
|
/* porting function */
|
|
#define inline __inline
|
|
#define __inline__ __inline
|
|
#define __attribute__(x)
|
|
#define va_copy(dst, src) ((dst) = (src))
|
|
#define strncasecmp _strnicmp
|
|
#define ftruncate _chsize
|
|
|
|
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
|
|
|
|
/* Use mingw_lstat() instead of lstat()/stat() and mingw_fstat() instead
|
|
* of fstat(). We add the declaration of these functions here, suppressing
|
|
* the corresponding declarations in mingw.h, so that we can use the
|
|
* appropriate structure type (and function) names from the msvc headers.
|
|
*/
|
|
#define stat _stat64
|
|
int mingw_lstat(const char *file_name, struct stat *buf);
|
|
int mingw_fstat(int fd, struct stat *buf);
|
|
#define fstat mingw_fstat
|
|
#define lstat mingw_lstat
|
|
#define _stat64(x,y) mingw_lstat(x,y)
|
|
#define ALREADY_DECLARED_STAT_FUNCS
|
|
|
|
#include "compat/mingw.h"
|
|
|
|
#undef ALREADY_DECLARED_STAT_FUNCS
|
|
|
|
#endif
|