From 675f701dbde4ba07b43c626109f00b57d3fa126d Mon Sep 17 00:00:00 2001 From: Alexandre Julliard Date: Sun, 28 Nov 2004 15:08:14 +0000 Subject: [PATCH] Fixed is_valid_winproc to avoid being optimized out by recent gcc versions. --- windows/winproc.c | 20 +++++++++++--------- 1 file changed, 11 insertions(+), 9 deletions(-) diff --git a/windows/winproc.c b/windows/winproc.c index ca145253c1f..1897707236a 100644 --- a/windows/winproc.c +++ b/windows/winproc.c @@ -138,10 +138,10 @@ static CRITICAL_SECTION winproc_cs = { &critsect_debug, -1, 0, 0, 0, 0 }; static BOOL is_valid_winproc( WINDOWPROC *proc ) { + /* check alignment */ + if (((BYTE *)proc - (BYTE *)winproc_array) % sizeof(*proc)) return FALSE; /* check array limits */ if (proc < winproc_array || proc >= winproc_array + winproc_used) return FALSE; - /* check alignment */ - if (proc != winproc_array + (proc - winproc_array)) return FALSE; return (proc->type != WIN_PROC_INVALID); } @@ -514,20 +514,22 @@ static WINDOWPROC *WINPROC_GetPtr( WNDPROC handle ) ptr = (BYTE *)handle; /* First check if it is the jmp address */ - proc = (WINDOWPROC *)(ptr - (int)&((WINDOWPROC *)0)->jmp); + proc = (WINDOWPROC *)(ptr - FIELD_OFFSET(WINDOWPROC,jmp)); if (is_valid_winproc(proc)) return proc; /* Now it must be the thunk address */ - proc = (WINDOWPROC *)(ptr - (int)&((WINDOWPROC *)0)->thunk); + proc = (WINDOWPROC *)(ptr - FIELD_OFFSET(WINDOWPROC,thunk)); if (is_valid_winproc(proc)) return proc; /* Check for a segmented pointer */ - ptr = MapSL( (SEGPTR)handle ); - /* It must be the thunk address */ - proc = (WINDOWPROC *)(ptr - (int)&((WINDOWPROC *)0)->thunk); - if (is_valid_winproc(proc)) return proc; - + if (HIWORD(handle) == get_winproc_selector()) + { + ptr = (BYTE *)winproc_array + LOWORD(handle); + /* It must be the thunk address */ + proc = (WINDOWPROC *)(ptr - FIELD_OFFSET(WINDOWPROC,thunk)); + if (is_valid_winproc(proc)) return proc; + } return NULL; } -- 2.11.4.GIT