Piotr Caban : msvcr80: Add _CreateFrameInfo implementation.

Alexandre Julliard julliard at wine.codeweavers.com
Thu Mar 17 10:02:13 CDT 2016


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

Author: Piotr Caban <piotr at codeweavers.com>
Date:   Wed Mar 16 21:01:50 2016 +0100

msvcr80: Add _CreateFrameInfo implementation.

Signed-off-by: Piotr Caban <piotr at codeweavers.com>
Signed-off-by: Alexandre Julliard <julliard at winehq.org>

---

 .../api-ms-win-crt-private-l1-1-0.spec                    |  2 +-
 dlls/msvcr100/msvcr100.spec                               |  2 +-
 dlls/msvcr110/msvcr110.spec                               |  2 +-
 dlls/msvcr120/msvcr120.spec                               |  2 +-
 dlls/msvcr120_app/msvcr120_app.spec                       |  2 +-
 dlls/msvcr80/msvcr80.spec                                 |  2 +-
 dlls/msvcr90/msvcr90.spec                                 |  2 +-
 dlls/msvcrt/except.c                                      | 15 +++++++++++++++
 dlls/msvcrt/except_i386.c                                 |  7 +++++++
 dlls/msvcrt/msvcrt.h                                      |  8 +++++++-
 dlls/ucrtbase/ucrtbase.spec                               |  2 +-
 dlls/vcruntime140/vcruntime140.spec                       |  2 +-
 12 files changed, 38 insertions(+), 10 deletions(-)

diff --git a/dlls/api-ms-win-crt-private-l1-1-0/api-ms-win-crt-private-l1-1-0.spec b/dlls/api-ms-win-crt-private-l1-1-0/api-ms-win-crt-private-l1-1-0.spec
index 8674f44..619425f 100644
--- a/dlls/api-ms-win-crt-private-l1-1-0/api-ms-win-crt-private-l1-1-0.spec
+++ b/dlls/api-ms-win-crt-private-l1-1-0/api-ms-win-crt-private-l1-1-0.spec
@@ -1,4 +1,4 @@
-@ stub _CreateFrameInfo
+@ cdecl _CreateFrameInfo(ptr ptr) ucrtbase._CreateFrameInfo
 @ stdcall _CxxThrowException(long long) ucrtbase._CxxThrowException
 @ cdecl -arch=i386 -norelay _EH_prolog() ucrtbase._EH_prolog
 @ stub _FindAndUnlinkFrame
diff --git a/dlls/msvcr100/msvcr100.spec b/dlls/msvcr100/msvcr100.spec
index 15a446f..7d6886a 100644
--- a/dlls/msvcr100/msvcr100.spec
+++ b/dlls/msvcr100/msvcr100.spec
@@ -522,7 +522,7 @@
 @ cdecl -arch=i386 _CItanh()
 @ cdecl _CRT_RTC_INIT(ptr ptr long long long)
 @ cdecl _CRT_RTC_INITW(ptr ptr long long long)
-@ stub _CreateFrameInfo
+@ cdecl _CreateFrameInfo(ptr ptr)
 @ stdcall _CxxThrowException(long long)
 @ cdecl -arch=i386 -norelay _EH_prolog()
 @ stub _FindAndUnlinkFrame
diff --git a/dlls/msvcr110/msvcr110.spec b/dlls/msvcr110/msvcr110.spec
index ccc659f..73b84e7 100644
--- a/dlls/msvcr110/msvcr110.spec
+++ b/dlls/msvcr110/msvcr110.spec
@@ -842,7 +842,7 @@
 @ cdecl -arch=i386 _CItanh()
 @ cdecl _CRT_RTC_INIT(ptr ptr long long long)
 @ cdecl _CRT_RTC_INITW(ptr ptr long long long)
-@ stub _CreateFrameInfo
+@ cdecl _CreateFrameInfo(ptr ptr)
 @ stdcall _CxxThrowException(long long)
 @ cdecl -arch=i386 -norelay _EH_prolog()
 @ stub -arch=arm _FPE_Raise
diff --git a/dlls/msvcr120/msvcr120.spec b/dlls/msvcr120/msvcr120.spec
index 5f17e06..7b274c9 100644
--- a/dlls/msvcr120/msvcr120.spec
+++ b/dlls/msvcr120/msvcr120.spec
@@ -825,7 +825,7 @@
 @ cdecl _CRT_RTC_INIT(ptr ptr long long long)
 @ cdecl _CRT_RTC_INITW(ptr ptr long long long)
 @ stub _Cbuild
-@ stub _CreateFrameInfo
+@ cdecl _CreateFrameInfo(ptr ptr)
 @ stdcall _CxxThrowException(long long)
 @ cdecl -arch=i386 -norelay _EH_prolog()
 @ stub -arch=arm _FPE_Raise
diff --git a/dlls/msvcr120_app/msvcr120_app.spec b/dlls/msvcr120_app/msvcr120_app.spec
index e978d20..dffe875 100644
--- a/dlls/msvcr120_app/msvcr120_app.spec
+++ b/dlls/msvcr120_app/msvcr120_app.spec
@@ -819,7 +819,7 @@
 @ cdecl -arch=i386 _CItan() msvcr120._CItan
 @ cdecl -arch=i386 _CItanh() msvcr120._CItanh
 @ stub _Cbuild
-@ stub _CreateFrameInfo
+@ cdecl _CreateFrameInfo(ptr ptr) msvcr120._CreateFrameInfo
 @ stdcall _CxxThrowException(long long) msvcr120._CxxThrowException
 @ cdecl -arch=i386 -norelay _EH_prolog() msvcr120._EH_prolog
 @ stub -arch=arm _FPE_Raise
diff --git a/dlls/msvcr80/msvcr80.spec b/dlls/msvcr80/msvcr80.spec
index 4df2215..1035b62 100644
--- a/dlls/msvcr80/msvcr80.spec
+++ b/dlls/msvcr80/msvcr80.spec
@@ -152,7 +152,7 @@
 @ cdecl -arch=i386 _CItanh()
 @ cdecl _CRT_RTC_INIT(ptr ptr long long long)
 @ cdecl _CRT_RTC_INITW(ptr ptr long long long)
-@ stub _CreateFrameInfo
+@ cdecl _CreateFrameInfo(ptr ptr)
 @ stdcall _CxxThrowException(long long)
 @ cdecl -arch=i386 -norelay _EH_prolog()
 @ stub _FindAndUnlinkFrame
diff --git a/dlls/msvcr90/msvcr90.spec b/dlls/msvcr90/msvcr90.spec
index 4bb2adb..cac6775 100644
--- a/dlls/msvcr90/msvcr90.spec
+++ b/dlls/msvcr90/msvcr90.spec
@@ -149,7 +149,7 @@
 @ cdecl -arch=i386 _CItanh()
 @ cdecl _CRT_RTC_INIT(ptr ptr long long long)
 @ cdecl _CRT_RTC_INITW(ptr ptr long long long)
-@ stub _CreateFrameInfo
+@ cdecl _CreateFrameInfo(ptr ptr)
 @ stdcall _CxxThrowException(long long)
 @ cdecl -arch=i386 -norelay _EH_prolog()
 @ stub _FindAndUnlinkFrame
diff --git a/dlls/msvcrt/except.c b/dlls/msvcrt/except.c
index f5c8b03..a204d62 100644
--- a/dlls/msvcrt/except.c
+++ b/dlls/msvcrt/except.c
@@ -326,3 +326,18 @@ LPTOP_LEVEL_EXCEPTION_FILTER CDECL MSVCR110__crtSetUnhandledExceptionFilter(LPTO
 {
     return SetUnhandledExceptionFilter(filter);
 }
+
+/*********************************************************************
+ * _CreateFrameInfo (MSVCR80.@)
+ */
+frame_info* CDECL _CreateFrameInfo(frame_info *fi, void *obj)
+{
+    thread_data_t *data = msvcrt_get_thread_data();
+
+    TRACE("(%p, %p)\n", fi, obj);
+
+    fi->next = data->frame_info_head;
+    data->frame_info_head = fi;
+    fi->object = obj;
+    return fi;
+}
diff --git a/dlls/msvcrt/except_i386.c b/dlls/msvcrt/except_i386.c
index 78ce488..4569572 100644
--- a/dlls/msvcrt/except_i386.c
+++ b/dlls/msvcrt/except_i386.c
@@ -414,6 +414,7 @@ static DWORD catch_function_nested_handler( EXCEPTION_RECORD *rec, EXCEPTION_REG
 BOOL __cdecl _IsExceptionObjectToBeDestroyed(const void *obj)
 {
     EXCEPTION_REGISTRATION_RECORD *reg = NtCurrentTeb()->Tib.ExceptionList;
+    frame_info *cur;
 
     TRACE( "%p\n", obj );
 
@@ -432,6 +433,12 @@ BOOL __cdecl _IsExceptionObjectToBeDestroyed(const void *obj)
         reg = reg->Prev;
     }
 
+    for (cur = msvcrt_get_thread_data()->frame_info_head; cur; cur = cur->next)
+    {
+        if (cur->object == obj)
+            return FALSE;
+    }
+
     return TRUE;
 }
 
diff --git a/dlls/msvcrt/msvcrt.h b/dlls/msvcrt/msvcrt.h
index aff1741..64a7ab9 100644
--- a/dlls/msvcrt/msvcrt.h
+++ b/dlls/msvcrt/msvcrt.h
@@ -204,6 +204,11 @@ typedef struct MSVCRT_localeinfo_struct
     MSVCRT_pthreadmbcinfo mbcinfo;
 } MSVCRT__locale_tstruct, *MSVCRT__locale_t;
 
+typedef struct _frame_info
+{
+    void *object;
+    struct _frame_info *next;
+} frame_info;
 
 /* TLS data */
 extern DWORD msvcrt_tls_index DECLSPEC_HIDDEN;
@@ -242,7 +247,8 @@ struct __thread_data {
     void                           *unk6[3];
     int                             unk7;
     EXCEPTION_RECORD               *exc_record;
-    void                           *unk8[7];
+    frame_info                     *frame_info_head;
+    void                           *unk8[6];
     LCID                            cached_lcid;
     int                             unk9[3];
     DWORD                           cached_cp;
diff --git a/dlls/ucrtbase/ucrtbase.spec b/dlls/ucrtbase/ucrtbase.spec
index 16540a5..df7c02e 100644
--- a/dlls/ucrtbase/ucrtbase.spec
+++ b/dlls/ucrtbase/ucrtbase.spec
@@ -17,7 +17,7 @@
 @ stub _Cbuild
 @ stub _Cmulcc
 @ stub _Cmulcr
-@ stub _CreateFrameInfo
+@ cdecl _CreateFrameInfo(ptr ptr)
 @ stdcall _CxxThrowException(long long)
 @ cdecl -arch=i386 -norelay _EH_prolog()
 @ stub _Exit
diff --git a/dlls/vcruntime140/vcruntime140.spec b/dlls/vcruntime140/vcruntime140.spec
index c518b15..c5e0c4f 100644
--- a/dlls/vcruntime140/vcruntime140.spec
+++ b/dlls/vcruntime140/vcruntime140.spec
@@ -1,4 +1,4 @@
-@ stub _CreateFrameInfo
+@ cdecl _CreateFrameInfo(ptr ptr) ucrtbase._CreateFrameInfo
 @ stdcall _CxxThrowException(long long) ucrtbase._CxxThrowException
 @ cdecl -arch=i386 -norelay _EH_prolog() ucrtbase._EH_prolog
 @ stub _FindAndUnlinkFrame




More information about the wine-cvs mailing list