From: Piotr Caban Subject: [PATCH 1/3] msvcp100: Improve is_current_task_group_canceling function stub Message-Id: <5f43b080-6821-c2e7-1ef9-e4e634ce815e@codeweavers.com> Date: Fri, 24 Mar 2017 12:45:10 +0100 Signed-off-by: Piotr Caban --- dlls/msvcp100/msvcp100.spec | 2 +- dlls/msvcp110/msvcp110.spec | 2 +- dlls/msvcp120/msvcp120.spec | 2 +- dlls/msvcp120_app/msvcp120_app.spec | 2 +- dlls/msvcp90/misc.c | 10 ++++------ dlls/msvcp90/msvcp90.h | 4 ++++ dlls/msvcp90/msvcp_main.c | 10 +++++++++- 7 files changed, 21 insertions(+), 11 deletions(-) diff --git a/dlls/msvcp100/msvcp100.spec b/dlls/msvcp100/msvcp100.spec index 6841678..7042598 100644 --- a/dlls/msvcp100/msvcp100.spec +++ b/dlls/msvcp100/msvcp100.spec @@ -2068,7 +2068,7 @@ @ extern ?is_bounded@_Num_base@std@@2_NB std_Num_base_is_bounded @ extern ?is_bounded@_Num_float_base@std@@2_NB std_Num_float_base_is_bounded @ extern ?is_bounded@_Num_int_base@std@@2_NB std_Num_int_base_is_bounded -@ cdecl ?is_current_task_group_canceling@Concurrency@@YA_NXZ(ptr) is_current_task_group_canceling +@ cdecl ?is_current_task_group_canceling@Concurrency@@YA_NXZ() is_current_task_group_canceling @ extern ?is_exact@_Num_base@std@@2_NB std_Num_base_is_exact @ extern ?is_exact@_Num_float_base@std@@2_NB std_Num_float_base_is_exact @ extern ?is_exact@_Num_int_base@std@@2_NB std_Num_int_base_is_exact diff --git a/dlls/msvcp110/msvcp110.spec b/dlls/msvcp110/msvcp110.spec index 602cb2b..52524c5 100644 --- a/dlls/msvcp110/msvcp110.spec +++ b/dlls/msvcp110/msvcp110.spec @@ -2832,7 +2832,7 @@ @ cdecl -arch=arm ?is@?$ctype@_W@std@@QBA_NF_W@Z(ptr long long) ctype_wchar_is_ch @ thiscall -arch=i386 ?is@?$ctype@_W@std@@QBE_NF_W@Z(ptr long long) ctype_wchar_is_ch @ cdecl -arch=win64 ?is@?$ctype@_W@std@@QEBA_NF_W@Z(ptr long long) ctype_wchar_is_ch -@ cdecl ?is_current_task_group_canceling@Concurrency@@YA_NXZ(ptr) is_current_task_group_canceling +@ cdecl ?is_current_task_group_canceling@Concurrency@@YA_NXZ() is_current_task_group_canceling @ stub ?is_task_cancellation_requested@Concurrency@@YA_NXZ @ cdecl -arch=arm ?isfx@?$basic_istream@DU?$char_traits@D@std@@@std@@QAAXXZ(ptr) basic_istream_char_isfx @ thiscall -arch=i386 ?isfx@?$basic_istream@DU?$char_traits@D@std@@@std@@QAEXXZ(ptr) basic_istream_char_isfx diff --git a/dlls/msvcp120/msvcp120.spec b/dlls/msvcp120/msvcp120.spec index a839575..173728a 100644 --- a/dlls/msvcp120/msvcp120.spec +++ b/dlls/msvcp120/msvcp120.spec @@ -2774,7 +2774,7 @@ @ cdecl -arch=arm ?is@?$ctype@_W@std@@QBA_NF_W@Z(ptr long long) ctype_wchar_is_ch @ thiscall -arch=i386 ?is@?$ctype@_W@std@@QBE_NF_W@Z(ptr long long) ctype_wchar_is_ch @ cdecl -arch=win64 ?is@?$ctype@_W@std@@QEBA_NF_W@Z(ptr long long) ctype_wchar_is_ch -@ cdecl ?is_current_task_group_canceling@Concurrency@@YA_NXZ(ptr) is_current_task_group_canceling +@ cdecl ?is_current_task_group_canceling@Concurrency@@YA_NXZ() is_current_task_group_canceling @ cdecl -arch=arm ?isfx@?$basic_istream@DU?$char_traits@D@std@@@std@@QAAXXZ(ptr) basic_istream_char_isfx @ thiscall -arch=i386 ?isfx@?$basic_istream@DU?$char_traits@D@std@@@std@@QAEXXZ(ptr) basic_istream_char_isfx @ cdecl -arch=win64 ?isfx@?$basic_istream@DU?$char_traits@D@std@@@std@@QEAAXXZ(ptr) basic_istream_char_isfx diff --git a/dlls/msvcp120_app/msvcp120_app.spec b/dlls/msvcp120_app/msvcp120_app.spec index 6bc6e5a..8a03b41 100644 --- a/dlls/msvcp120_app/msvcp120_app.spec +++ b/dlls/msvcp120_app/msvcp120_app.spec @@ -2774,7 +2774,7 @@ @ cdecl -arch=arm ?is@?$ctype@_W@std@@QBA_NF_W@Z(ptr long long) msvcp120.?is@?$ctype@_W@std@@QBA_NF_W@Z @ thiscall -arch=i386 ?is@?$ctype@_W@std@@QBE_NF_W@Z(ptr long long) msvcp120.?is@?$ctype@_W@std@@QBE_NF_W@Z @ cdecl -arch=win64 ?is@?$ctype@_W@std@@QEBA_NF_W@Z(ptr long long) msvcp120.?is@?$ctype@_W@std@@QEBA_NF_W@Z -@ cdecl ?is_current_task_group_canceling@Concurrency@@YA_NXZ(ptr) msvcp120.?is_current_task_group_canceling@Concurrency@@YA_NXZ +@ cdecl ?is_current_task_group_canceling@Concurrency@@YA_NXZ() msvcp120.?is_current_task_group_canceling@Concurrency@@YA_NXZ @ cdecl -arch=arm ?isfx@?$basic_istream@DU?$char_traits@D@std@@@std@@QAAXXZ(ptr) msvcp120.?isfx@?$basic_istream@DU?$char_traits@D@std@@@std@@QAAXXZ @ thiscall -arch=i386 ?isfx@?$basic_istream@DU?$char_traits@D@std@@@std@@QAEXXZ(ptr) msvcp120.?isfx@?$basic_istream@DU?$char_traits@D@std@@@std@@QAEXXZ @ cdecl -arch=win64 ?isfx@?$basic_istream@DU?$char_traits@D@std@@@std@@QEAAXXZ(ptr) msvcp120.?isfx@?$basic_istream@DU?$char_traits@D@std@@@std@@QEAAXXZ diff --git a/dlls/msvcp90/misc.c b/dlls/msvcp90/misc.c index 81a6f81..fa5ac1d 100644 --- a/dlls/msvcp90/misc.c +++ b/dlls/msvcp90/misc.c @@ -1400,15 +1400,13 @@ void __cdecl _Unlock_shared_ptr_spin_lock(void) } #endif +#if _MSVCP_VER >= 100 /* ?is_current_task_group_canceling@Concurrency@@YA_NXZ */ -MSVCP_bool __cdecl is_current_task_group_canceling(void *this) +MSVCP_bool __cdecl is_current_task_group_canceling(void) { - static int once; - - if (!once++) - FIXME("(%p) stub\n", this); - return FALSE; + return Context_IsCurrentTaskCollectionCanceling(); } +#endif #if _MSVCP_VER >= 140 typedef struct { diff --git a/dlls/msvcp90/msvcp90.h b/dlls/msvcp90/msvcp90.h index 86b787b..d751186 100644 --- a/dlls/msvcp90/msvcp90.h +++ b/dlls/msvcp90/msvcp90.h @@ -72,6 +72,10 @@ extern void (__thiscall *critical_section_unlock)(critical_section*); extern MSVCP_bool (__thiscall *critical_section_trylock)(critical_section*); #endif +#if _MSVCP_VER >= 100 +extern MSVCP_bool (__cdecl *Context_IsCurrentTaskCollectionCanceling)(void); +#endif + /* basic_string, allocator> */ typedef struct { diff --git a/dlls/msvcp90/msvcp_main.c b/dlls/msvcp90/msvcp_main.c index 377ae01..3898c9d 100644 --- a/dlls/msvcp90/msvcp_main.c +++ b/dlls/msvcp90/msvcp_main.c @@ -68,6 +68,10 @@ void (__thiscall *critical_section_unlock)(critical_section*); MSVCP_bool (__thiscall *critical_section_trylock)(critical_section*); #endif +#if _MSVCP_VER >= 100 +MSVCP_bool (__cdecl *Context_IsCurrentTaskCollectionCanceling)(void); +#endif + #define VERSION_STRING(ver) #ver #if _MSVCP_VER >= 140 #define MSVCRT_NAME(ver) "ucrtbase.dll" @@ -133,7 +137,7 @@ int __cdecl sprintf(char *buf, const char *fmt, ...) static void init_cxx_funcs(void) { HMODULE hmod = GetModuleHandleA( MSVCRT_NAME(_MSVCP_VER) ); -#if _MSVCP_VER >= 110 +#if _MSVCP_VER >= 100 HMODULE hcon = hmod; #endif @@ -187,6 +191,10 @@ static void init_cxx_funcs(void) #endif } #endif /* _MSVCP_VER >= 110 */ + +#if _MSVCP_VER >= 100 + Context_IsCurrentTaskCollectionCanceling = (void*)GetProcAddress(hcon, "?IsCurrentTaskCollectionCanceling@Context@Concurrency@@SA_NXZ"); +#endif } BOOL WINAPI DllMain(HINSTANCE hinstDLL, DWORD fdwReason, LPVOID lpvReserved)