From: Paul Gofman <pgofman(a)codeweavers.com> --- dlls/msvcp140/msvcp140.spec | 4 ++-- dlls/msvcp90/exception.c | 15 +++++++++++++++ 2 files changed, 17 insertions(+), 2 deletions(-) diff --git a/dlls/msvcp140/msvcp140.spec b/dlls/msvcp140/msvcp140.spec index 232a2b959a2..241dd4eed2c 100644 --- a/dlls/msvcp140/msvcp140.spec +++ b/dlls/msvcp140/msvcp140.spec @@ -1693,8 +1693,8 @@ @ cdecl -arch=win64 ?__ExceptionPtrAssign@@YAXPEAXPEBX(a)Z(ptr ptr) msvcr120.?__ExceptionPtrAssign@@YAXPEAXPEBX(a)Z @ cdecl -arch=win32 ?__ExceptionPtrCompare@@YA_NPBX0(a)Z(ptr ptr) msvcr120.?__ExceptionPtrCompare@@YA_NPBX0(a)Z @ cdecl -arch=win64 ?__ExceptionPtrCompare@@YA_NPEBX0(a)Z(ptr ptr) msvcr120.?__ExceptionPtrCompare@@YA_NPEBX0(a)Z -@ cdecl -arch=win32 ?__ExceptionPtrCopy@@YAXPAXPBX(a)Z(ptr ptr) msvcr120.?__ExceptionPtrCopy@@YAXPAXPBX(a)Z -@ cdecl -arch=win64 ?__ExceptionPtrCopy@@YAXPEAXPEBX(a)Z(ptr ptr) msvcr120.?__ExceptionPtrCopy@@YAXPEAXPEBX(a)Z +@ cdecl -arch=win32 ?__ExceptionPtrCopy@@YAXPAXPBX(a)Z(ptr ptr) __ExceptionPtrCopy +@ cdecl -arch=win64 ?__ExceptionPtrCopy@@YAXPEAXPEBX(a)Z(ptr ptr) __ExceptionPtrCopy @ cdecl -arch=win32 ?__ExceptionPtrCopyException@@YAXPAXPBX1(a)Z(ptr ptr ptr) msvcr120.?__ExceptionPtrCopyException@@YAXPAXPBX1(a)Z @ cdecl -arch=win64 ?__ExceptionPtrCopyException@@YAXPEAXPEBX1(a)Z(ptr ptr ptr) msvcr120.?__ExceptionPtrCopyException@@YAXPEAXPEBX1(a)Z @ cdecl -arch=win32 ?__ExceptionPtrCreate@@YAXPAX(a)Z(ptr) __ExceptionPtrCreate diff --git a/dlls/msvcp90/exception.c b/dlls/msvcp90/exception.c index effe57063a1..89465d7578d 100644 --- a/dlls/msvcp90/exception.c +++ b/dlls/msvcp90/exception.c @@ -1013,6 +1013,21 @@ void __cdecl __ExceptionPtrDestroy(exception_ptr *ep) HeapFree(GetProcessHeap(), 0, ep->ref); } } + +/********************************************************************* + * ?__ExceptionPtrCopy@@YAXPAXPBX(a)Z + * ?__ExceptionPtrCopy@@YAXPEAXPEBX(a)Z + */ +void __cdecl __ExceptionPtrCopy(exception_ptr *ep, const exception_ptr *copy) +{ + TRACE("(%p %p)\n", ep, copy); + + /* don't destroy object stored in ep */ + *ep = *copy; + if (ep->ref) + InterlockedIncrement(copy->ref); +} + #endif #if _MSVCP_VER >= 70 || defined(_MSVCIRT) -- GitLab https://gitlab.winehq.org/wine/wine/-/merge_requests/1034