Skip to content

Commit

Permalink
Add platform files for porting to MSVC
Browse files Browse the repository at this point in the history
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>
  • Loading branch information
Frank Li authored and Junio C Hamano committed Sep 19, 2009
1 parent 16fe1e0 commit d75f8e6
Show file tree
Hide file tree
Showing 3 changed files with 93 additions and 0 deletions.
35 changes: 35 additions & 0 deletions compat/msvc.c
Original file line number Diff line number Diff line change
@@ -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 changes: 55 additions & 0 deletions compat/msvc.h
Original file line number Diff line number Diff line change
@@ -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
3 changes: 3 additions & 0 deletions git-compat-util.h
Original file line number Diff line number Diff line change
Expand Up @@ -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>
Expand Down

0 comments on commit d75f8e6

Please sign in to comment.