Module: wine Branch: master Commit: 7e79b5656e5fa88e224f118b69c534c3312c38be URL: http://source.winehq.org/git/wine.git/?a=commit;h=7e79b5656e5fa88e224f118b69...
Author: Mikołaj Zalewski mikolaj@zalewski.pl Date: Tue Aug 14 11:47:56 2007 -0700
kernel32: Return error code if WOWCallback16Ex of a real-mode function failed.
---
dlls/kernel32/wowthunk.c | 11 +++++++++++ 1 files changed, 11 insertions(+), 0 deletions(-)
diff --git a/dlls/kernel32/wowthunk.c b/dlls/kernel32/wowthunk.c index 4f714ab..2ccfddf 100644 --- a/dlls/kernel32/wowthunk.c +++ b/dlls/kernel32/wowthunk.c @@ -23,6 +23,7 @@
#include <assert.h> #include <stdarg.h> +#include <errno.h>
#include "wine/winbase16.h" #include "windef.h" @@ -587,9 +588,19 @@ BOOL WINAPI K32WOWCallback16Ex( DWORD vpfn16, DWORD dwFlags, { EXCEPTION_REGISTRATION_RECORD frame; frame.Handler = vm86_handler; + errno = 0; __wine_push_frame( &frame ); __wine_enter_vm86( context ); __wine_pop_frame( &frame ); + if (errno != 0) /* enter_vm86 will fall with ENOSYS on x64 kernels */ + { + ERR("__wine_enter_vm86 failed (errno=%d)\n", errno); + if (errno == ENOSYS) + SetLastError(ERROR_NOT_SUPPORTED); + else + SetLastError(ERROR_GEN_FAILURE); + return FALSE; + } } else {