aboutsummaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorFabrice Popineau2013-12-31 18:01:34 +0200
committerEli Zaretskii2013-12-31 18:01:34 +0200
commitbd717ca4f4c25e45dcb3b894323fd608ae278922 (patch)
treeb61f9c9c54d45cd408bf2c8e1198db3e84172bec /src
parent535f0fbd00ab0cdb65c09270ea8df03f9528f127 (diff)
downloademacs-bd717ca4f4c25e45dcb3b894323fd608ae278922.tar.gz
emacs-bd717ca4f4c25e45dcb3b894323fd608ae278922.zip
Minor fixes for MinGW64 build.
configure.ac (canonical, C_SWITCH_SYSTEM): Support a 64-bit MinGW64 build on MS-Windows. nt/inc/ms-w32.h (sys_kill): Fix prototype. src/w32term.c (w32_initialize): Use LCID and LOWORD. src/w32proc.c (create_child): Use pid_t for 5th argument. (IsValidLocale): Don't provide prototype for MinGW64. (Fw32_get_valid_keyboard_layouts, Fw32_get_keyboard_layout) (Fw32_set_keyboard_layout): Use HKL and HIWORD/LOWORD. src/w32heap.c (allocate_heap) [_WIN64]: Use "ull", not "i64", which MinGW64 doesn't support. src/lisp.h (EMACS_INT) [_WIN64]: Define for the MinGW64 build.
Diffstat (limited to 'src')
-rw-r--r--src/ChangeLog12
-rw-r--r--src/lisp.h2
-rw-r--r--src/w32heap.c4
-rw-r--r--src/w32proc.c27
-rw-r--r--src/w32term.c5
5 files changed, 31 insertions, 19 deletions
diff --git a/src/ChangeLog b/src/ChangeLog
index 356d0b7bbf5..d17191df9d0 100644
--- a/src/ChangeLog
+++ b/src/ChangeLog
@@ -1,5 +1,17 @@
12013-12-31 Fabrice Popineau <fabrice.popineau@supelec.fr> 12013-12-31 Fabrice Popineau <fabrice.popineau@supelec.fr>
2 2
3 * w32term.c (w32_initialize): Use LCID and LOWORD.
4
5 * w32proc.c (create_child): Use pid_t for 5th argument.
6 (IsValidLocale): Don't provide prototype for MinGW64.
7 (Fw32_get_valid_keyboard_layouts, Fw32_get_keyboard_layout)
8 (Fw32_set_keyboard_layout): Use HKL and HIWORD/LOWORD.
9
10 * w32heap.c (allocate_heap) [_WIN64]: Use "ull", not "i64", which
11 MinGW64 doesn't support.
12
13 * lisp.h (EMACS_INT) [_WIN64]: Define for the MinGW64 build.
14
3 * w32.c (set_named_security_info): New function. 15 * w32.c (set_named_security_info): New function.
4 (acl_set_file): Fall back on set_named_security_info if 16 (acl_set_file): Fall back on set_named_security_info if
5 set_file_security fails. 17 set_file_security fails.
diff --git a/src/lisp.h b/src/lisp.h
index bb1c38e1bf6..0ae0e607253 100644
--- a/src/lisp.h
+++ b/src/lisp.h
@@ -62,7 +62,7 @@ INLINE_HEADER_BEGIN
62 pI - printf length modifier for EMACS_INT 62 pI - printf length modifier for EMACS_INT
63 EMACS_UINT - unsigned variant of EMACS_INT */ 63 EMACS_UINT - unsigned variant of EMACS_INT */
64#ifndef EMACS_INT_MAX 64#ifndef EMACS_INT_MAX
65# if LONG_MAX < LLONG_MAX && defined WIDE_EMACS_INT 65# if LONG_MAX < LLONG_MAX && (defined(WIDE_EMACS_INT) || defined(_WIN64))
66typedef long long int EMACS_INT; 66typedef long long int EMACS_INT;
67typedef unsigned long long int EMACS_UINT; 67typedef unsigned long long int EMACS_UINT;
68# define EMACS_INT_MAX LLONG_MAX 68# define EMACS_INT_MAX LLONG_MAX
diff --git a/src/w32heap.c b/src/w32heap.c
index 81206ce2834..405eccf75f2 100644
--- a/src/w32heap.c
+++ b/src/w32heap.c
@@ -78,7 +78,7 @@ allocate_heap (void)
78 while (!ptr && (base < end)) 78 while (!ptr && (base < end))
79 { 79 {
80#ifdef _WIN64 80#ifdef _WIN64
81 reserved_heap_size = min(end - base, 0x4000000000i64); /* Limit to 256Gb */ 81 reserved_heap_size = min(end - base, 0x4000000000ull); /* Limit to 256Gb */
82#else 82#else
83 reserved_heap_size = end - base; 83 reserved_heap_size = end - base;
84#endif 84#endif
@@ -96,7 +96,7 @@ static char *
96allocate_heap (void) 96allocate_heap (void)
97{ 97{
98#ifdef _WIN64 98#ifdef _WIN64
99 size_t size = 0x4000000000i64; /* start by asking for 32GB */ 99 size_t size = 0x4000000000ull; /* start by asking for 32GB */
100#else 100#else
101 /* We used to start with 2GB here, but on Windows 7 that would leave 101 /* We used to start with 2GB here, but on Windows 7 that would leave
102 too little room in the address space for threads started by 102 too little room in the address space for threads started by
diff --git a/src/w32proc.c b/src/w32proc.c
index 2b583efba56..aecf3e5a24f 100644
--- a/src/w32proc.c
+++ b/src/w32proc.c
@@ -43,8 +43,9 @@ along with GNU Emacs. If not, see <http://www.gnu.org/licenses/>. */
43#undef kill 43#undef kill
44 44
45#include <windows.h> 45#include <windows.h>
46#ifdef __GNUC__ 46#if defined(__GNUC__) && !defined(__MINGW64__)
47/* This definition is missing from mingw32 headers. */ 47/* This definition is missing from mingw.org headers, but not MinGW64
48 headers. */
48extern BOOL WINAPI IsValidLocale (LCID, DWORD); 49extern BOOL WINAPI IsValidLocale (LCID, DWORD);
49#endif 50#endif
50 51
@@ -1066,7 +1067,7 @@ static char * process_dir;
1066 1067
1067static BOOL 1068static BOOL
1068create_child (char *exe, char *cmdline, char *env, int is_gui_app, 1069create_child (char *exe, char *cmdline, char *env, int is_gui_app,
1069 int * pPid, child_process *cp) 1070 pid_t * pPid, child_process *cp)
1070{ 1071{
1071 STARTUPINFO start; 1072 STARTUPINFO start;
1072 SECURITY_ATTRIBUTES sec_attrs; 1073 SECURITY_ATTRIBUTES sec_attrs;
@@ -3084,10 +3085,10 @@ The return value is a list of pairs of language id and layout id. */)
3084 { 3085 {
3085 while (--num_layouts >= 0) 3086 while (--num_layouts >= 0)
3086 { 3087 {
3087 DWORD kl = (DWORD) layouts[num_layouts]; 3088 HKL kl = layouts[num_layouts];
3088 3089
3089 obj = Fcons (Fcons (make_number (kl & 0xffff), 3090 obj = Fcons (Fcons (make_number (LOWORD (kl)),
3090 make_number ((kl >> 16) & 0xffff)), 3091 make_number (HIWORD (kl))),
3091 obj); 3092 obj);
3092 } 3093 }
3093 } 3094 }
@@ -3102,10 +3103,10 @@ DEFUN ("w32-get-keyboard-layout", Fw32_get_keyboard_layout,
3102The return value is the cons of the language id and the layout id. */) 3103The return value is the cons of the language id and the layout id. */)
3103 (void) 3104 (void)
3104{ 3105{
3105 DWORD kl = (DWORD) GetKeyboardLayout (dwWindowsThreadId); 3106 HKL kl = GetKeyboardLayout (dwWindowsThreadId);
3106 3107
3107 return Fcons (make_number (kl & 0xffff), 3108 return Fcons (make_number (LOWORD (kl)),
3108 make_number ((kl >> 16) & 0xffff)); 3109 make_number (HIWORD (kl)));
3109} 3110}
3110 3111
3111 3112
@@ -3116,14 +3117,14 @@ The keyboard layout setting affects interpretation of keyboard input.
3116If successful, the new layout id is returned, otherwise nil. */) 3117If successful, the new layout id is returned, otherwise nil. */)
3117 (Lisp_Object layout) 3118 (Lisp_Object layout)
3118{ 3119{
3119 DWORD kl; 3120 HKL kl;
3120 3121
3121 CHECK_CONS (layout); 3122 CHECK_CONS (layout);
3122 CHECK_NUMBER_CAR (layout); 3123 CHECK_NUMBER_CAR (layout);
3123 CHECK_NUMBER_CDR (layout); 3124 CHECK_NUMBER_CDR (layout);
3124 3125
3125 kl = (XINT (XCAR (layout)) & 0xffff) 3126 kl = (HKL) ((XINT (XCAR (layout)) & 0xffff)
3126 | (XINT (XCDR (layout)) << 16); 3127 | (XINT (XCDR (layout)) << 16));
3127 3128
3128 /* Synchronize layout with input thread. */ 3129 /* Synchronize layout with input thread. */
3129 if (dwWindowsThreadId) 3130 if (dwWindowsThreadId)
@@ -3138,7 +3139,7 @@ If successful, the new layout id is returned, otherwise nil. */)
3138 return Qnil; 3139 return Qnil;
3139 } 3140 }
3140 } 3141 }
3141 else if (!ActivateKeyboardLayout ((HKL) kl, 0)) 3142 else if (!ActivateKeyboardLayout (kl, 0))
3142 return Qnil; 3143 return Qnil;
3143 3144
3144 return Fw32_get_keyboard_layout (); 3145 return Fw32_get_keyboard_layout ();
diff --git a/src/w32term.c b/src/w32term.c
index 583e0ebaf31..1753a9ffc9d 100644
--- a/src/w32term.c
+++ b/src/w32term.c
@@ -6410,9 +6410,8 @@ w32_initialize (void)
6410 Fset_input_mode (Qnil, Qnil, make_number (2), Qnil); 6410 Fset_input_mode (Qnil, Qnil, make_number (2), Qnil);
6411 6411
6412 { 6412 {
6413 DWORD input_locale_id = ((DWORD_PTR) GetKeyboardLayout (0) & 0xffffffff); 6413 LCID input_locale_id = LOWORD (GetKeyboardLayout (0));
6414 w32_keyboard_codepage = 6414 w32_keyboard_codepage = codepage_for_locale (input_locale_id);
6415 codepage_for_locale ((LCID) (input_locale_id & 0xffff));
6416 } 6415 }
6417 6416
6418 /* Create the window thread - it will terminate itself when the app 6417 /* Create the window thread - it will terminate itself when the app