Add platform files for porting to MSVC

Add msvc.c and msvc.h to build git under MSVC.

Signed-off-by: Frank Li <lznuaa@gmail.com>
Signed-off-by: Marius Storm-Olsen <mstormo@gmail.com>
Acked-by: Johannes Sixt <j6t@kdbg.org>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
This commit is contained in:
Frank Li 2009-09-16 10:20:25 +02:00 committed by Junio C Hamano
parent 16fe1e0369
commit d75f8e6131
3 changed files with 93 additions and 0 deletions

35
compat/msvc.c Normal file
View File

@ -0,0 +1,35 @@
#include "../git-compat-util.h"
#include "win32.h"
#include <conio.h>
#include "../strbuf.h"
DIR *opendir(const char *name)
{
int len;
DIR *p;
p = (DIR*)malloc(sizeof(DIR));
memset(p, 0, sizeof(DIR));
strncpy(p->dd_name, name, PATH_MAX);
len = strlen(p->dd_name);
p->dd_name[len] = '/';
p->dd_name[len+1] = '*';
if (p == NULL)
return NULL;
p->dd_handle = _findfirst(p->dd_name, &p->dd_dta);
if (p->dd_handle == -1) {
free(p);
return NULL;
}
return p;
}
int closedir(DIR *dir)
{
_findclose(dir->dd_handle);
free(dir);
return 0;
}
#include "mingw.c"

55
compat/msvc.h Normal file
View File

@ -0,0 +1,55 @@
#ifndef __MSVC__HEAD
#define __MSVC__HEAD
/* Define minimize windows version */
#define WINVER 0x0500
#define _WIN32_WINNT 0x0500
#define _WIN32_WINDOWS 0x0410
#define _WIN32_IE 0x0700
#define NTDDI_VERSION NTDDI_WIN2KSP1
#include <winsock2.h>
#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))
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
#undef stat
#undef _stati64
#include "compat/mingw.h"
#undef stat
#define stat _stati64
#define _stat64(x,y) mingw_lstat(x,y)
/*
Even though _stati64 is normally just defined at _stat64
on Windows, we specify it here as a proper struct to avoid
compiler warnings about macro redefinition due to magic in
mingw.h. Struct taken from ReactOS (GNU GPL license).
*/
struct _stati64 {
_dev_t st_dev;
_ino_t st_ino;
unsigned short st_mode;
short st_nlink;
short st_uid;
short st_gid;
_dev_t st_rdev;
__int64 st_size;
time_t st_atime;
time_t st_mtime;
time_t st_ctime;
};
#endif

View File

@ -113,6 +113,9 @@
/* pull in Windows compatibility stuff */
#include "compat/mingw.h"
#endif /* __MINGW32__ */
#ifdef _MSC_VER
#include "compat/msvc.h"
#endif
#ifndef NO_LIBGEN_H
#include <libgen.h>