Module: wine Branch: master Commit: 6945ce6bc37225f691549e1f8114ba681c8e8114 URL: https://gitlab.winehq.org/wine/wine/-/commit/6945ce6bc37225f691549e1f8114ba6...
Author: Alexandre Julliard julliard@winehq.org Date: Fri May 17 12:36:30 2024 +0200
msvcrt: Unify __CxxDetectRethrow implementations.
---
dlls/msvcrt/cppexcept.h | 6 ++++++ dlls/msvcrt/except.c | 23 +++++++++++++++++++++++ dlls/msvcrt/except_arm.c | 24 ------------------------ dlls/msvcrt/except_arm64.c | 24 ------------------------ dlls/msvcrt/except_arm64ec.c | 24 ------------------------ dlls/msvcrt/except_i386.c | 23 ----------------------- dlls/msvcrt/except_x86_64.c | 24 ------------------------ 7 files changed, 29 insertions(+), 119 deletions(-)
diff --git a/dlls/msvcrt/cppexcept.h b/dlls/msvcrt/cppexcept.h index 9760e6222bb..d5ad0f8a0f6 100644 --- a/dlls/msvcrt/cppexcept.h +++ b/dlls/msvcrt/cppexcept.h @@ -28,6 +28,12 @@ #define CXX_FRAME_MAGIC_VC8 0x19930522 #define CXX_EXCEPTION 0xe06d7363
+#ifdef __x86_64__ +#define CXX_EXCEPTION_PARAMS 4 +#else +#define CXX_EXCEPTION_PARAMS 3 +#endif + #define FUNC_DESCR_SYNCHRONOUS 1 /* synchronous exceptions only (built with /EHs and /EHsc) */ #define FUNC_DESCR_NOEXCEPT 4 /* noexcept function */
diff --git a/dlls/msvcrt/except.c b/dlls/msvcrt/except.c index c224c472c55..ce1a7525d4a 100644 --- a/dlls/msvcrt/except.c +++ b/dlls/msvcrt/except.c @@ -287,6 +287,29 @@ int CDECL __CppXcptFilter(NTSTATUS ex, PEXCEPTION_POINTERS ptr) return _XcptFilter(ex, ptr); }
+/********************************************************************* + * __CxxDetectRethrow (MSVCRT.@) + */ +BOOL CDECL __CxxDetectRethrow(PEXCEPTION_POINTERS ptrs) +{ + PEXCEPTION_RECORD rec; + + if (!ptrs) + return FALSE; + + rec = ptrs->ExceptionRecord; + + if (rec->ExceptionCode == CXX_EXCEPTION && + rec->NumberParameters == CXX_EXCEPTION_PARAMS && + rec->ExceptionInformation[0] == CXX_FRAME_MAGIC_VC6 && + rec->ExceptionInformation[2]) + { + ptrs->ExceptionRecord = msvcrt_get_thread_data()->exc_record; + return TRUE; + } + return (msvcrt_get_thread_data()->exc_record == rec); +} + /********************************************************************* * __CxxQueryExceptionSize (MSVCRT.@) */ diff --git a/dlls/msvcrt/except_arm.c b/dlls/msvcrt/except_arm.c index 84a2f358213..47194b4e8ae 100644 --- a/dlls/msvcrt/except_arm.c +++ b/dlls/msvcrt/except_arm.c @@ -61,30 +61,6 @@ EXCEPTION_DISPOSITION CDECL __CxxFrameHandler(EXCEPTION_RECORD *rec, DWORD frame }
-/********************************************************************* - * __CxxDetectRethrow (MSVCRT.@) - */ -BOOL CDECL __CxxDetectRethrow(PEXCEPTION_POINTERS ptrs) -{ - PEXCEPTION_RECORD rec; - - if (!ptrs) - return FALSE; - - rec = ptrs->ExceptionRecord; - - if (rec->ExceptionCode == CXX_EXCEPTION && - rec->NumberParameters == 3 && - rec->ExceptionInformation[0] == CXX_FRAME_MAGIC_VC6 && - rec->ExceptionInformation[2]) - { - ptrs->ExceptionRecord = msvcrt_get_thread_data()->exc_record; - return TRUE; - } - return (msvcrt_get_thread_data()->exc_record == rec); -} - - /********************************************************************* * _fpieee_flt (MSVCRT.@) */ diff --git a/dlls/msvcrt/except_arm64.c b/dlls/msvcrt/except_arm64.c index fc1af2e2689..bbff0f618cc 100644 --- a/dlls/msvcrt/except_arm64.c +++ b/dlls/msvcrt/except_arm64.c @@ -62,30 +62,6 @@ EXCEPTION_DISPOSITION CDECL __CxxFrameHandler(EXCEPTION_RECORD *rec, ULONG64 fra }
-/********************************************************************* - * __CxxDetectRethrow (MSVCRT.@) - */ -BOOL CDECL __CxxDetectRethrow(PEXCEPTION_POINTERS ptrs) -{ - PEXCEPTION_RECORD rec; - - if (!ptrs) - return FALSE; - - rec = ptrs->ExceptionRecord; - - if (rec->ExceptionCode == CXX_EXCEPTION && - rec->NumberParameters == 3 && - rec->ExceptionInformation[0] == CXX_FRAME_MAGIC_VC6 && - rec->ExceptionInformation[2]) - { - ptrs->ExceptionRecord = msvcrt_get_thread_data()->exc_record; - return TRUE; - } - return (msvcrt_get_thread_data()->exc_record == rec); -} - - /******************************************************************* * _setjmp (MSVCRT.@) */ diff --git a/dlls/msvcrt/except_arm64ec.c b/dlls/msvcrt/except_arm64ec.c index 826884f4df4..5ef9dae809b 100644 --- a/dlls/msvcrt/except_arm64ec.c +++ b/dlls/msvcrt/except_arm64ec.c @@ -61,30 +61,6 @@ EXCEPTION_DISPOSITION CDECL __CxxFrameHandler( EXCEPTION_RECORD *rec, ULONG64 fr }
-/********************************************************************* - * __CxxDetectRethrow (MSVCRT.@) - */ -BOOL CDECL __CxxDetectRethrow( PEXCEPTION_POINTERS ptrs ) -{ - PEXCEPTION_RECORD rec; - - if (!ptrs) - return FALSE; - - rec = ptrs->ExceptionRecord; - - if (rec->ExceptionCode == CXX_EXCEPTION && - rec->NumberParameters == 3 && - rec->ExceptionInformation[0] == CXX_FRAME_MAGIC_VC6 && - rec->ExceptionInformation[2]) - { - ptrs->ExceptionRecord = msvcrt_get_thread_data()->exc_record; - return TRUE; - } - return (msvcrt_get_thread_data()->exc_record == rec); -} - - /********************************************************************* * _fpieee_flt (MSVCRT.@) */ diff --git a/dlls/msvcrt/except_i386.c b/dlls/msvcrt/except_i386.c index 6ce65fc7122..8ae6056ff8f 100644 --- a/dlls/msvcrt/except_i386.c +++ b/dlls/msvcrt/except_i386.c @@ -689,29 +689,6 @@ void __stdcall __CxxLongjmpUnwind( const _JUMP_BUFFER *buf ) cxx_local_unwind( frame, descr, buf->TryLevel ); }
-/********************************************************************* - * __CxxDetectRethrow (MSVCRT.@) - */ -BOOL CDECL __CxxDetectRethrow(PEXCEPTION_POINTERS ptrs) -{ - PEXCEPTION_RECORD rec; - - if (!ptrs) - return FALSE; - - rec = ptrs->ExceptionRecord; - - if (rec->ExceptionCode == CXX_EXCEPTION && - rec->NumberParameters == 3 && - rec->ExceptionInformation[0] == CXX_FRAME_MAGIC_VC6 && - rec->ExceptionInformation[2]) - { - ptrs->ExceptionRecord = msvcrt_get_thread_data()->exc_record; - return TRUE; - } - return (msvcrt_get_thread_data()->exc_record == rec); -} - /********************************************************************* * _EH_prolog (MSVCRT.@) */ diff --git a/dlls/msvcrt/except_x86_64.c b/dlls/msvcrt/except_x86_64.c index a2537c9a549..fee2ec236a1 100644 --- a/dlls/msvcrt/except_x86_64.c +++ b/dlls/msvcrt/except_x86_64.c @@ -655,30 +655,6 @@ EXCEPTION_DISPOSITION CDECL __CxxFrameHandler( EXCEPTION_RECORD *rec, ULONG64 fr }
-/********************************************************************* - * __CxxDetectRethrow (MSVCRT.@) - */ -BOOL CDECL __CxxDetectRethrow(PEXCEPTION_POINTERS ptrs) -{ - PEXCEPTION_RECORD rec; - - if (!ptrs) - return FALSE; - - rec = ptrs->ExceptionRecord; - - if (rec->ExceptionCode == CXX_EXCEPTION && - rec->NumberParameters == 4 && - rec->ExceptionInformation[0] == CXX_FRAME_MAGIC_VC6 && - rec->ExceptionInformation[2]) - { - ptrs->ExceptionRecord = msvcrt_get_thread_data()->exc_record; - return TRUE; - } - return (msvcrt_get_thread_data()->exc_record == rec); -} - - /******************************************************************* * longjmp (MSVCRT.@) */