Commit b88b62de authored by Eli Zaretskii's avatar Eli Zaretskii

Fix more incompatibilities between MinGW.org and MinGW64 headers

Reported by ׃scar Fuentes in
  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.

 nt/inc/ms-w32.h (USE_NO_MINGW_SETJMP_TWO_ARGS) [_W64]: Define to 1.
 For MinGW64, include sys/types.h and time.h.
 nt/inc/sys/time.h (struct timeval) [!_W64]: Guard definition with _W64.
 (struct timezone) [!_TIMEZONE_DEFINED]: Guard definition with
 _TIMEZONE_DEFINED.
 nt/addpm.c (_WIN32_IE) [_W64]: For MinGW64, don't define to 0x400.
 nt/inc/sys/stat.h: Remove _CRTIMP from prototypes of fstat, stat,
 lstat, and fstatat.

 lib-src/ntlib.c (struct timespec) [!_TIMEZONE_DEFINED]: Define the
 struct only if _TIMEZONE_DEFINED is not defined.

 src/w32term.c (WCRANGE, GLYPHSET): Don't define if _W64 is defined.
 src/w32.c (REPARSE_DATA_BUFFER): Guard with
 MAXIMUM_REPARSE_DATA_BUFFER_SIZE being defined.
parent 69b2c07e
2013-03-26 Eli Zaretskii <eliz@gnu.org>
Fix incompatibilities between MinGW.org and MinGW64 headers.
* ntlib.c (struct timespec) [!_TIMEZONE_DEFINED]: Define the
struct only if _TIMEZONE_DEFINED is not defined.
2013-03-23 cg <chengang31@gmail.com> (tiny change) 2013-03-23 cg <chengang31@gmail.com> (tiny change)
* makefile.w32-in (LIB_SRC): Move before first use. * makefile.w32-in (LIB_SRC): Move before first use.
......
...@@ -34,11 +34,15 @@ along with GNU Emacs. If not, see <http://www.gnu.org/licenses/>. */ ...@@ -34,11 +34,15 @@ along with GNU Emacs. If not, see <http://www.gnu.org/licenses/>. */
#include "ntlib.h" #include "ntlib.h"
/* MinGW64 defines _TIMEZONE_DEFINED and defines 'struct timespec' in
its system headers. */
#ifndef _TIMEZONE_DEFINED
struct timezone struct timezone
{ {
int tz_minuteswest; /* minutes west of Greenwich */ int tz_minuteswest; /* minutes west of Greenwich */
int tz_dsttime; /* type of dst correction */ int tz_dsttime; /* type of dst correction */
}; };
#endif
#define MAXPATHLEN _MAX_PATH #define MAXPATHLEN _MAX_PATH
......
2013-03-26 Eli Zaretskii <eliz@gnu.org>
Fix more incompatibilities between MinGW.org and MinGW64 headers
reported by Óscar Fuentes in
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.
* inc/sys/time.h (struct timeval) [!_W64]: Guard definition with
_W64.
(struct timezone) [!_TIMEZONE_DEFINED]: Guard definition with
_TIMEZONE_DEFINED.
* addpm.c (_WIN32_IE) [_W64]: For MinGW64, don't define to 0x400.
* inc/sys/stat.h: Remove _CRTIMP from prototypes of fstat, stat,
lstat, and fstatat.
2013-03-25 Eli Zaretskii <eliz@gnu.org> 2013-03-25 Eli Zaretskii <eliz@gnu.org>
Fix incompatibilities between MinGW.org and MinGW64 headers Fix incompatibilities between MinGW.org and MinGW64 headers
......
...@@ -34,7 +34,11 @@ along with GNU Emacs. If not, see <http://www.gnu.org/licenses/>. */ ...@@ -34,7 +34,11 @@ along with GNU Emacs. If not, see <http://www.gnu.org/licenses/>. */
installed, then the DDE fallback for creating icons the Windows 3.1 installed, then the DDE fallback for creating icons the Windows 3.1
progman way will be used instead, but that is prone to lockups progman way will be used instead, but that is prone to lockups
caused by other applications not servicing their message queues. */ caused by other applications not servicing their message queues. */
/* MinGW64 defines _W64 and barfs if _WIN32_IE is defined to anything
below 0x500. */
#ifndef _W64
#define _WIN32_IE 0x400 #define _WIN32_IE 0x400
#endif
/* Request C Object macros for COM interfaces. */ /* Request C Object macros for COM interfaces. */
#define COBJMACROS 1 #define COBJMACROS 1
......
...@@ -154,6 +154,14 @@ extern char *getenv (); ...@@ -154,6 +154,14 @@ extern char *getenv ();
#ifdef emacs #ifdef emacs
#ifdef _W64
/* MinGW64 specific stuff. */
#define USE_NO_MINGW_SETJMP_TWO_ARGS 1
/* Make sure 'struct timespec' and 'struct timezone' are defined. */
#include <sys/types.h>
#include <time.h>
#endif
#ifdef _MSC_VER #ifdef _MSC_VER
#include <sys/timeb.h> #include <sys/timeb.h>
#include <sys/stat.h> #include <sys/stat.h>
......
...@@ -106,11 +106,11 @@ extern int w32_stat_get_owner_group; ...@@ -106,11 +106,11 @@ extern int w32_stat_get_owner_group;
/* Prevent redefinition by other headers, e.g. wchar.h. */ /* Prevent redefinition by other headers, e.g. wchar.h. */
#define _STAT_DEFINED #define _STAT_DEFINED
_CRTIMP int __cdecl __MINGW_NOTHROW fstat (int, struct stat*); int __cdecl __MINGW_NOTHROW fstat (int, struct stat*);
_CRTIMP int __cdecl __MINGW_NOTHROW chmod (const char*, int); int __cdecl __MINGW_NOTHROW stat (const char*, struct stat*);
_CRTIMP int __cdecl __MINGW_NOTHROW stat (const char*, struct stat*); int __cdecl __MINGW_NOTHROW lstat (const char*, struct stat*);
_CRTIMP int __cdecl __MINGW_NOTHROW lstat (const char*, struct stat*); int __cdecl __MINGW_NOTHROW fstatat (int, char const *,
_CRTIMP int __cdecl __MINGW_NOTHROW fstatat (int, char const *,
struct stat *, int); struct stat *, int);
_CRTIMP int __cdecl __MINGW_NOTHROW chmod (const char*, int);
#endif /* INC_SYS_STAT_H_ */ #endif /* INC_SYS_STAT_H_ */
...@@ -6,31 +6,34 @@ ...@@ -6,31 +6,34 @@
* have the below stuff. * have the below stuff.
*/ */
/* The guards are for MinGW64, which defines these structs on its
system headers which are included by ms-w32.h. */
#ifndef _W64
struct timeval struct timeval
{ {
long tv_sec; /* seconds */ long tv_sec; /* seconds */
long tv_usec; /* microseconds */ long tv_usec; /* microseconds */
}; };
#endif
#ifndef _TIMEZONE_DEFINED
struct timezone struct timezone
{ {
int tz_minuteswest; /* minutes west of Greenwich */ int tz_minuteswest; /* minutes west of Greenwich */
int tz_dsttime; /* type of dst correction */ int tz_dsttime; /* type of dst correction */
}; };
#endif
void gettimeofday (struct timeval *, struct timezone *); void gettimeofday (struct timeval *, struct timezone *);
#define ITIMER_REAL 0 #define ITIMER_REAL 0
#define ITIMER_PROF 1 #define ITIMER_PROF 1
/* MinGW64 defines 'struct itimerval' and _TIMESPEC_DEFINED in sys/types.h. */
#ifndef _TIMESPEC_DEFINED
struct itimerval struct itimerval
{ {
struct timeval it_interval; /* timer interval */ struct timeval it_interval; /* timer interval */
struct timeval it_value; /* current value */ struct timeval it_value; /* current value */
}; };
#endif
int getitimer (int, struct itimerval *); int getitimer (int, struct itimerval *);
int setitimer (int, struct itimerval *, struct itimerval *); int setitimer (int, struct itimerval *, struct itimerval *);
......
2013-03-26 Eli Zaretskii <eliz@gnu.org>
Fix incompatibilities between MinGW.org and MinGW64 headers.
* w32term.c (WCRANGE, GLYPHSET): Don't define if _W64 is defined.
* w32.c (REPARSE_DATA_BUFFER): Guard with
MAXIMUM_REPARSE_DATA_BUFFER_SIZE being defined.
2013-03-25 Jan Djärv <jan.h.d@swipnet.se> 2013-03-25 Jan Djärv <jan.h.d@swipnet.se>
* xterm.c: Include X11/XKBlib.h * xterm.c: Include X11/XKBlib.h
......
...@@ -127,7 +127,7 @@ typedef struct _PROCESS_MEMORY_COUNTERS_EX { ...@@ -127,7 +127,7 @@ typedef struct _PROCESS_MEMORY_COUNTERS_EX {
#define SDDL_REVISION_1 1 #define SDDL_REVISION_1 1
#endif /* SDDL_REVISION_1 */ #endif /* SDDL_REVISION_1 */
#ifdef _MSC_VER #ifndef MAXIMUM_REPARSE_DATA_BUFFER_SIZE
/* MSVC doesn't provide the definition of REPARSE_DATA_BUFFER and the /* MSVC doesn't provide the definition of REPARSE_DATA_BUFFER and the
associated macros, except on ntifs.h, which cannot be included associated macros, except on ntifs.h, which cannot be included
because it triggers conflicts with other Windows API headers. So because it triggers conflicts with other Windows API headers. So
......
...@@ -109,9 +109,10 @@ struct w32_display_info *x_display_list; ...@@ -109,9 +109,10 @@ struct w32_display_info *x_display_list;
Lisp_Object w32_display_name_list; Lisp_Object w32_display_name_list;
#if _WIN32_WINNT < 0x0500 #if _WIN32_WINNT < 0x0500 && !defined(_W64)
/* Pre Windows 2000, this was not available, but define it here so /* Pre Windows 2000, this was not available, but define it here so
that Emacs compiled on such a platform will run on newer versions. */ that Emacs compiled on such a platform will run on newer versions.
MinGW64 (_W64) defines these unconditionally, so avoid redefining. */
typedef struct tagWCRANGE typedef struct tagWCRANGE
{ {
......
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment