Piotr Caban : msvcr80: Add _FindAndUnlinkFrame implementation.

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


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

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

msvcr80: Add _FindAndUnlinkFrame 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                               | 28 ++++++++++++++++++++++
 dlls/ucrtbase/ucrtbase.spec                        |  2 +-
 dlls/vcruntime140/vcruntime140.spec                |  2 +-
 10 files changed, 37 insertions(+), 9 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 619425f..f26b932 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,7 +1,7 @@
 @ cdecl _CreateFrameInfo(ptr ptr) ucrtbase._CreateFrameInfo
 @ stdcall _CxxThrowException(long long) ucrtbase._CxxThrowException
 @ cdecl -arch=i386 -norelay _EH_prolog() ucrtbase._EH_prolog
-@ stub _FindAndUnlinkFrame
+@ cdecl _FindAndUnlinkFrame(ptr) ucrtbase._FindAndUnlinkFrame
 @ stub _GetImageBase
 @ stub _GetThrowImageBase
 @ cdecl -arch=i386,x86_64,arm _IsExceptionObjectToBeDestroyed(ptr) ucrtbase._IsExceptionObjectToBeDestroyed
diff --git a/dlls/msvcr100/msvcr100.spec b/dlls/msvcr100/msvcr100.spec
index 7d6886a..33473b8 100644
--- a/dlls/msvcr100/msvcr100.spec
+++ b/dlls/msvcr100/msvcr100.spec
@@ -525,7 +525,7 @@
 @ cdecl _CreateFrameInfo(ptr ptr)
 @ stdcall _CxxThrowException(long long)
 @ cdecl -arch=i386 -norelay _EH_prolog()
-@ stub _FindAndUnlinkFrame
+@ cdecl _FindAndUnlinkFrame(ptr)
 @ cdecl _Getdays()
 @ cdecl _Getmonths()
 @ cdecl _Gettnames()
diff --git a/dlls/msvcr110/msvcr110.spec b/dlls/msvcr110/msvcr110.spec
index 73b84e7..6299a4f 100644
--- a/dlls/msvcr110/msvcr110.spec
+++ b/dlls/msvcr110/msvcr110.spec
@@ -846,7 +846,7 @@
 @ stdcall _CxxThrowException(long long)
 @ cdecl -arch=i386 -norelay _EH_prolog()
 @ stub -arch=arm _FPE_Raise
-@ stub _FindAndUnlinkFrame
+@ cdecl _FindAndUnlinkFrame(ptr)
 @ stub -arch=win64 _GetImageBase
 @ stub -arch=win64 _GetThrowImageBase
 @ cdecl _Getdays()
diff --git a/dlls/msvcr120/msvcr120.spec b/dlls/msvcr120/msvcr120.spec
index 7b274c9..bb1ae34 100644
--- a/dlls/msvcr120/msvcr120.spec
+++ b/dlls/msvcr120/msvcr120.spec
@@ -830,7 +830,7 @@
 @ cdecl -arch=i386 -norelay _EH_prolog()
 @ stub -arch=arm _FPE_Raise
 @ stub _FCbuild
-@ stub _FindAndUnlinkFrame
+@ cdecl _FindAndUnlinkFrame(ptr)
 @ stub -arch=win64 _GetImageBase
 @ stub -arch=win64 _GetThrowImageBase
 @ cdecl _Getdays()
diff --git a/dlls/msvcr120_app/msvcr120_app.spec b/dlls/msvcr120_app/msvcr120_app.spec
index dffe875..694230f 100644
--- a/dlls/msvcr120_app/msvcr120_app.spec
+++ b/dlls/msvcr120_app/msvcr120_app.spec
@@ -824,7 +824,7 @@
 @ cdecl -arch=i386 -norelay _EH_prolog() msvcr120._EH_prolog
 @ stub -arch=arm _FPE_Raise
 @ stub _FCbuild
-@ stub _FindAndUnlinkFrame
+@ cdecl _FindAndUnlinkFrame(ptr) msvcr120._FindAndUnlinkFrame
 @ stub -arch=win64 _GetImageBase
 @ stub -arch=win64 _GetThrowImageBase
 @ cdecl _Getdays() msvcr120._Getdays
diff --git a/dlls/msvcr80/msvcr80.spec b/dlls/msvcr80/msvcr80.spec
index 1035b62..ccf7357 100644
--- a/dlls/msvcr80/msvcr80.spec
+++ b/dlls/msvcr80/msvcr80.spec
@@ -155,7 +155,7 @@
 @ cdecl _CreateFrameInfo(ptr ptr)
 @ stdcall _CxxThrowException(long long)
 @ cdecl -arch=i386 -norelay _EH_prolog()
-@ stub _FindAndUnlinkFrame
+@ cdecl _FindAndUnlinkFrame(ptr)
 @ stub -arch=win64 _GetImageBase
 @ stub -arch=win64 _GetThrowImageBase
 @ cdecl _Getdays()
diff --git a/dlls/msvcr90/msvcr90.spec b/dlls/msvcr90/msvcr90.spec
index cac6775..43de82a 100644
--- a/dlls/msvcr90/msvcr90.spec
+++ b/dlls/msvcr90/msvcr90.spec
@@ -152,7 +152,7 @@
 @ cdecl _CreateFrameInfo(ptr ptr)
 @ stdcall _CxxThrowException(long long)
 @ cdecl -arch=i386 -norelay _EH_prolog()
-@ stub _FindAndUnlinkFrame
+@ cdecl _FindAndUnlinkFrame(ptr)
 @ cdecl _Getdays()
 @ cdecl _Getmonths()
 @ cdecl _Gettnames()
diff --git a/dlls/msvcrt/except.c b/dlls/msvcrt/except.c
index a204d62..ec923b1 100644
--- a/dlls/msvcrt/except.c
+++ b/dlls/msvcrt/except.c
@@ -341,3 +341,31 @@ frame_info* CDECL _CreateFrameInfo(frame_info *fi, void *obj)
     fi->object = obj;
     return fi;
 }
+
+/*********************************************************************
+ * _FindAndUnlinkFrame (MSVCR80.@)
+ */
+void CDECL _FindAndUnlinkFrame(frame_info *fi)
+{
+    thread_data_t *data = msvcrt_get_thread_data();
+    frame_info *cur = data->frame_info_head;
+
+    TRACE("(%p)\n", fi);
+
+    if (cur == fi)
+    {
+        data->frame_info_head = cur->next;
+        return;
+    }
+
+    for (; cur->next; cur = cur->next)
+    {
+        if (cur->next == fi)
+        {
+            cur->next = fi->next;
+            return;
+        }
+    }
+
+    ERR("frame not found, native crashes in this case\n");
+}
diff --git a/dlls/ucrtbase/ucrtbase.spec b/dlls/ucrtbase/ucrtbase.spec
index df7c02e..44b62a7 100644
--- a/dlls/ucrtbase/ucrtbase.spec
+++ b/dlls/ucrtbase/ucrtbase.spec
@@ -24,7 +24,7 @@
 @ stub _FCbuild
 @ stub _FCmulcc
 @ stub _FCmulcr
-@ stub _FindAndUnlinkFrame
+@ cdecl _FindAndUnlinkFrame(ptr)
 @ stub _GetImageBase
 @ stub _GetThrowImageBase
 @ cdecl _Getdays()
diff --git a/dlls/vcruntime140/vcruntime140.spec b/dlls/vcruntime140/vcruntime140.spec
index c5e0c4f..ea58694 100644
--- a/dlls/vcruntime140/vcruntime140.spec
+++ b/dlls/vcruntime140/vcruntime140.spec
@@ -1,7 +1,7 @@
 @ cdecl _CreateFrameInfo(ptr ptr) ucrtbase._CreateFrameInfo
 @ stdcall _CxxThrowException(long long) ucrtbase._CxxThrowException
 @ cdecl -arch=i386 -norelay _EH_prolog() ucrtbase._EH_prolog
-@ stub _FindAndUnlinkFrame
+@ cdecl _FindAndUnlinkFrame(ptr) ucrtbase._FindAndUnlinkFrame
 @ cdecl -arch=i386,x86_64,arm _IsExceptionObjectToBeDestroyed(ptr) ucrtbase._IsExceptionObjectToBeDestroyed
 @ stub _NLG_Dispatch2
 @ stub _NLG_Return




More information about the wine-cvs mailing list