Alexandre Julliard : msvcrt: Implemented __CppXcptFilter.

Alexandre Julliard julliard at winehq.org
Tue Mar 11 10:51:53 CDT 2008


Module: wine
Branch: master
Commit: a6d7b6fc60b40cd9b73f1de0d7d74d96edc8b3a7
URL:    http://source.winehq.org/git/wine.git/?a=commit;h=a6d7b6fc60b40cd9b73f1de0d7d74d96edc8b3a7

Author: Alexandre Julliard <julliard at winehq.org>
Date:   Tue Mar 11 16:14:44 2008 +0100

msvcrt: Implemented __CppXcptFilter.

---

 dlls/msvcr71/msvcr71.spec |    2 +-
 dlls/msvcrt/cppexcept.c   |   11 +++++++++++
 dlls/msvcrt/cppexcept.h   |    4 +++-
 dlls/msvcrt/msvcrt.spec   |    1 +
 4 files changed, 16 insertions(+), 2 deletions(-)

diff --git a/dlls/msvcr71/msvcr71.spec b/dlls/msvcr71/msvcr71.spec
index 28ec8a3..e39f0fb 100644
--- a/dlls/msvcr71/msvcr71.spec
+++ b/dlls/msvcr71/msvcr71.spec
@@ -75,7 +75,7 @@
 @ extern _HUGE msvcrt._HUGE
 @ cdecl _Strftime(str long str ptr ptr) msvcrt._Strftime
 @ cdecl _XcptFilter(long ptr) msvcrt._XcptFilter
-@ stub __CppXcptFilter
+@ cdecl __CppXcptFilter(long ptr) msvcrt.__CppXcptFilter
 @ stub __CxxCallUnwindDtor
 @ stub __CxxCallUnwindVecDtor
 @ stub __CxxDetectRethrow
diff --git a/dlls/msvcrt/cppexcept.c b/dlls/msvcrt/cppexcept.c
index 08d928a..6dafc9e 100644
--- a/dlls/msvcrt/cppexcept.c
+++ b/dlls/msvcrt/cppexcept.c
@@ -440,6 +440,17 @@ void __stdcall __CxxLongjmpUnwind( const struct MSVCRT___JUMP_BUFFER *buf )
 
 #endif  /* __i386__ */
 
+
+/*********************************************************************
+ *		__CppXcptFilter (MSVCRT.@)
+ */
+int CDECL __CppXcptFilter(NTSTATUS ex, PEXCEPTION_POINTERS ptr)
+{
+    /* only filter c++ exceptions */
+    if (ex != CXX_EXCEPTION) return EXCEPTION_CONTINUE_SEARCH;
+    return _XcptFilter( ex, ptr );
+}
+
 /*********************************************************************
  *		_CxxThrowException (MSVCRT.@)
  */
diff --git a/dlls/msvcrt/cppexcept.h b/dlls/msvcrt/cppexcept.h
index bf607c9..0818fa7 100644
--- a/dlls/msvcrt/cppexcept.h
+++ b/dlls/msvcrt/cppexcept.h
@@ -133,7 +133,9 @@ typedef struct __cxx_exception_type
     const cxx_type_info_table *type_info_table;  /* list of types for this exception object */
 } cxx_exception_type;
 
-void _CxxThrowException(exception*,const cxx_exception_type*);
+void CDECL _CxxThrowException(exception*,const cxx_exception_type*);
+int CDECL _XcptFilter(NTSTATUS, PEXCEPTION_POINTERS);
+int CDECL __CppXcptFilter(NTSTATUS, PEXCEPTION_POINTERS);
 
 static inline const char *dbgstr_type_info( const type_info *info )
 {
diff --git a/dlls/msvcrt/msvcrt.spec b/dlls/msvcrt/msvcrt.spec
index 7b821e6..8f8ccf4 100644
--- a/dlls/msvcrt/msvcrt.spec
+++ b/dlls/msvcrt/msvcrt.spec
@@ -75,6 +75,7 @@
 @ extern _HUGE MSVCRT__HUGE
 @ cdecl _Strftime(str long str ptr ptr)
 @ cdecl _XcptFilter(long ptr)
+@ cdecl __CppXcptFilter(long ptr)
 @ cdecl __CxxDetectRethrow(ptr)
 @ cdecl -i386 -norelay __CxxFrameHandler(ptr ptr ptr ptr)
 @ stdcall -i386 __CxxLongjmpUnwind(ptr)




More information about the wine-cvs mailing list