Win64 patch 3/9 (user32)

Ge van Geldorp ge at gse.nl
Mon Jul 10 01:58:24 CDT 2006


Changelog:
  Ge van Geldorp <ge at gse.nl>
  - Move handle indicator to upper 32 bits for Win64

 dlls/user/winproc.c |   12 +++++++++---
 1 files changed, 9 insertions(+), 3 deletions(-)

diff --git a/dlls/user/winproc.c b/dlls/user/winproc.c
index 0c1f36f..712454d 100644
--- a/dlls/user/winproc.c
+++ b/dlls/user/winproc.c
@@ -52,7 +52,12 @@ typedef struct tagWINDOWPROC
     WNDPROC        procW;    /* Unicode window proc */
 } WINDOWPROC;
 
-#define WINPROC_HANDLE (~0UL >> 16)
+#ifdef _WIN64
+#define WINPROC_HANDLE_BITS 32
+#else
+#define WINPROC_HANDLE_BITS 16
+#endif
+#define WINPROC_HANDLE (~0UL >> WINPROC_HANDLE_BITS)
 #define MAX_WINPROCS  8192
 
 static WINDOWPROC winproc_array[MAX_WINPROCS];
@@ -110,7 +115,7 @@ static inline WINDOWPROC *find_winproc( 
 static inline WINDOWPROC *handle_to_proc( WNDPROC handle )
 {
     UINT index = LOWORD(handle);
-    if ((ULONG_PTR)handle >> 16 != WINPROC_HANDLE) return NULL;
+    if ((ULONG_PTR)handle >> WINPROC_HANDLE_BITS != WINPROC_HANDLE) return NULL;
     if (index >= winproc_used) return NULL;
     return &winproc_array[index];
 }
@@ -118,7 +123,8 @@ static inline WINDOWPROC *handle_to_proc
 /* create a handle for a given window proc */
 static inline WNDPROC proc_to_handle( WINDOWPROC *proc )
 {
-    return (WNDPROC)(ULONG_PTR)((proc - winproc_array) | (WINPROC_HANDLE << 16));
+    return (WNDPROC)(ULONG_PTR)((proc - winproc_array) |
+                                (WINPROC_HANDLE << WINPROC_HANDLE_BITS));
 }
 
 /* allocate and initialize a new winproc */
-- 
1.4.0




More information about the wine-patches mailing list