@matheusbsbs / matheus-bagliano / commits / d75f8e6131
Fork 0

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>

Frank Li committed Sep 16, 2009 at 10:20 UTC d75f8e61315cc502c34aec6600db00a7c7192ffd
3 files changed +93
compat/msvc.c new
+35
@@ -0,0 +1,35 @@
1 +#include "../git-compat-util.h"
2 +#include "win32.h"
3 +#include <conio.h>
4 +#include "../strbuf.h"
5 +
6 +DIR *opendir(const char *name)
7 +{
8 + int len;
9 + DIR *p;
10 + p = (DIR*)malloc(sizeof(DIR));
11 + memset(p, 0, sizeof(DIR));
12 + strncpy(p->dd_name, name, PATH_MAX);
13 + len = strlen(p->dd_name);
14 + p->dd_name[len] = '/';
15 + p->dd_name[len+1] = '*';
16 +
17 + if (p == NULL)
18 + return NULL;
19 +
20 + p->dd_handle = _findfirst(p->dd_name, &p->dd_dta);
21 +
22 + if (p->dd_handle == -1) {
23 + free(p);
24 + return NULL;
25 + }
26 + return p;
27 +}
28 +int closedir(DIR *dir)
29 +{
30 + _findclose(dir->dd_handle);
31 + free(dir);
32 + return 0;
33 +}
34 +
35 +#include "mingw.c"
compat/msvc.h new
+55
@@ -0,0 +1,55 @@
1 +#ifndef __MSVC__HEAD
2 +#define __MSVC__HEAD
3 +
4 +/* Define minimize windows version */
5 +#define WINVER 0x0500
6 +#define _WIN32_WINNT 0x0500
7 +#define _WIN32_WINDOWS 0x0410
8 +#define _WIN32_IE 0x0700
9 +#define NTDDI_VERSION NTDDI_WIN2KSP1
10 +#include <winsock2.h>
11 +#include <direct.h>
12 +#include <process.h>
13 +#include <malloc.h>
14 +
15 +/* porting function */
16 +#define inline __inline
17 +#define __inline__ __inline
18 +#define __attribute__(x)
19 +#define va_copy(dst, src) ((dst) = (src))
20 +
21 +static __inline int strcasecmp (const char *s1, const char *s2)
22 +{
23 + int size1 = strlen(s1);
24 + int sisz2 = strlen(s2);
25 + return _strnicmp(s1, s2, sisz2 > size1 ? sisz2 : size1);
26 +}
27 +
28 +#undef ERROR
29 +#undef stat
30 +#undef _stati64
31 +#include "compat/mingw.h"
32 +#undef stat
33 +#define stat _stati64
34 +#define _stat64(x,y) mingw_lstat(x,y)
35 +
36 +/*
37 + Even though _stati64 is normally just defined at _stat64
38 + on Windows, we specify it here as a proper struct to avoid
39 + compiler warnings about macro redefinition due to magic in
40 + mingw.h. Struct taken from ReactOS (GNU GPL license).
41 +*/
42 +struct _stati64 {
43 + _dev_t st_dev;
44 + _ino_t st_ino;
45 + unsigned short st_mode;
46 + short st_nlink;
47 + short st_uid;
48 + short st_gid;
49 + _dev_t st_rdev;
50 + __int64 st_size;
51 + time_t st_atime;
52 + time_t st_mtime;
53 + time_t st_ctime;
54 +};
55 +#endif
git-compat-util.h
+3
@@ -113,6 +113,9 @@
113 /* pull in Windows compatibility stuff */
114 #include "compat/mingw.h"
115 #endif /* __MINGW32__ */
116 +#ifdef _MSC_VER
117 +#include "compat/msvc.h"
118 +#endif
119
120 #ifndef NO_LIBGEN_H
121 #include <libgen.h>