From a18d7de6144f9b0ce1202c6ac9c065cbd8e78168 Mon Sep 17 00:00:00 2001 From: Eli Zaretskii Date: Tue, 26 Mar 2013 15:45:01 +0200 Subject: [PATCH] Fix more MinGW64 incompatibilities. MIME-Version: 1.0 Content-Type: text/plain; charset=utf8 Content-Transfer-Encoding: 8bit Reported by ׃scar Fuentes in http://lists.gnu.org/archive/html/emacs-devel/2013-03/msg00733.html nt/inc/ms-w32.h (_WIN32_WINNT) [!_W64]: Don't define for MinGW64. nt/inc/sys/stat.h (chmod): Remove _CRTIMP from prototype. src/w32.c (_PROCESS_MEMORY_COUNTERS_EX) [_WIN32_WINNT < 0x0500]: Define only for _WIN32_WINNT less than 0x0500. --- nt/ChangeLog | 4 ++++ nt/inc/ms-w32.h | 8 +++++--- nt/inc/sys/stat.h | 2 +- src/ChangeLog | 3 +++ src/w32.c | 5 ++++- 5 files changed, 17 insertions(+), 5 deletions(-) diff --git a/nt/ChangeLog b/nt/ChangeLog index f4fa0a7ee53..10f145a0dd9 100644 --- a/nt/ChangeLog +++ b/nt/ChangeLog @@ -2,11 +2,15 @@ Fix more incompatibilities between MinGW.org and MinGW64 headers reported by Óscar Fuentes in + http://lists.gnu.org/archive/html/emacs-devel/2013-03/msg00733.html http://lists.gnu.org/archive/html/emacs-devel/2013-03/msg00699.html and in http://lists.gnu.org/archive/html/emacs-devel/2013-03/msg00707.html. * inc/ms-w32.h (USE_NO_MINGW_SETJMP_TWO_ARGS) [_W64]: Define to 1. For MinGW64, include sys/types.h and time.h. + (_WIN32_WINNT) [!_W64]: Don't define for MinGW64. + + * inc/sys/stat.h (chmod): Remove _CRTIMP from prototype. * inc/sys/time.h (struct timeval) [!_W64]: Guard definition with _W64. diff --git a/nt/inc/ms-w32.h b/nt/inc/ms-w32.h index ccab3695c6c..f721676f731 100644 --- a/nt/inc/ms-w32.h +++ b/nt/inc/ms-w32.h @@ -129,9 +129,11 @@ extern char *getenv (); /* Prevent accidental use of features unavailable in older Windows versions we still support. MinGW64 defines this to a higher value - in its system headers, so define our override before including any - system headers. */ -#define _WIN32_WINNT 0x0400 + in its system headers, and is not really compatible with values + lower than 0x0500, so leave it alone. */ +#ifndef _W64 +# define _WIN32_WINNT 0x0400 +#endif /* Make a leaner executable. */ #define WIN32_LEAN_AND_MEAN 1 diff --git a/nt/inc/sys/stat.h b/nt/inc/sys/stat.h index 31129bbf4f3..f6785c56477 100644 --- a/nt/inc/sys/stat.h +++ b/nt/inc/sys/stat.h @@ -111,6 +111,6 @@ int __cdecl __MINGW_NOTHROW stat (const char*, struct stat*); int __cdecl __MINGW_NOTHROW lstat (const char*, struct stat*); int __cdecl __MINGW_NOTHROW fstatat (int, char const *, struct stat *, int); -_CRTIMP int __cdecl __MINGW_NOTHROW chmod (const char*, int); +int __cdecl __MINGW_NOTHROW chmod (const char*, int); #endif /* INC_SYS_STAT_H_ */ diff --git a/src/ChangeLog b/src/ChangeLog index 669c8e99a27..93d2b447cd5 100644 --- a/src/ChangeLog +++ b/src/ChangeLog @@ -1,5 +1,8 @@ 2013-03-26 Eli Zaretskii + * w32.c (_PROCESS_MEMORY_COUNTERS_EX) [_WIN32_WINNT < 0x0500]: + Define only for _WIN32_WINNT less than 0x0500. + Fix incompatibilities between MinGW.org and MinGW64 headers. * w32term.c (WCRANGE, GLYPHSET): Don't define if _W64 is defined. diff --git a/src/w32.c b/src/w32.c index f34d98bc1b8..861e578985d 100644 --- a/src/w32.c +++ b/src/w32.c @@ -69,7 +69,8 @@ along with GNU Emacs. If not, see . */ #include #include -#ifdef __GNUC__ +/* MinGW64 (_W64) defines these in its _mingw.h. */ +#if defined(__GNUC__) && !defined(_W64) #define _ANONYMOUS_UNION #define _ANONYMOUS_STRUCT #endif @@ -96,6 +97,7 @@ typedef struct _MEMORY_STATUS_EX { #ifndef _MSC_VER #include #endif +#if _WIN32_WINNT < 0x0500 #if !defined (__MINGW32__) || __W32API_MAJOR_VERSION < 3 || (__W32API_MAJOR_VERSION == 3 && __W32API_MINOR_VERSION < 15) /* This either is not in psapi.h or guarded by higher value of _WIN32_WINNT than what we use. w32api supplied with MinGW 3.15 @@ -114,6 +116,7 @@ typedef struct _PROCESS_MEMORY_COUNTERS_EX { SIZE_T PrivateUsage; } PROCESS_MEMORY_COUNTERS_EX,*PPROCESS_MEMORY_COUNTERS_EX; #endif +#endif #include #include -- 2.39.2