From 09ba010a1f1966818249e15bb652269a944d1476 Mon Sep 17 00:00:00 2001 From: Vadim Dashevskiy Date: Fri, 15 Jun 2012 16:18:13 +0000 Subject: MSN reverted git-svn-id: http://svn.miranda-ng.org/main/trunk@428 1316c22d-e87f-b044-9b9b-93d7a3e3ba9c --- protocols/MSN/msn_misc.cpp | 38 ++++++++++++++++++++++++++++++++++++++ 1 file changed, 38 insertions(+) (limited to 'protocols/MSN/msn_misc.cpp') diff --git a/protocols/MSN/msn_misc.cpp b/protocols/MSN/msn_misc.cpp index ee3d188350..80d9fd46ec 100644 --- a/protocols/MSN/msn_misc.cpp +++ b/protocols/MSN/msn_misc.cpp @@ -22,6 +22,44 @@ along with this program. If not, see . #include "msn_proto.h" #include "version.h" +#if !defined(_UNICODE) && !defined(_WIN64) + +typedef LONG (WINAPI pIncrementFunc)(LONG volatile*); +static pIncrementFunc MyInterlockedIncrement95; +static pIncrementFunc MyInterlockedIncrementInit; + +pIncrementFunc *MyInterlockedIncrement = MyInterlockedIncrementInit; + +static CRITICAL_SECTION csInterlocked95; + +///////////////////////////////////////////////////////////////////////////////////////// +// InterlockedIncrement emulation + +static LONG WINAPI MyInterlockedIncrement95(LONG volatile* pVal) +{ + DWORD ret; + EnterCriticalSection(&csInterlocked95); + ret=++*pVal; + LeaveCriticalSection(&csInterlocked95); + return ret; +} + +//there's a possible hole here if too many people call this at the same time, but that doesn't happen +static LONG WINAPI MyInterlockedIncrementInit(LONG volatile* pVal) +{ + DWORD ver = GetVersion(); + if ((ver & 0x80000000) && LOWORD(ver) == 0x0004) + { + InitializeCriticalSection(&csInterlocked95); + MyInterlockedIncrement = MyInterlockedIncrement95; + } + else + MyInterlockedIncrement = (pIncrementFunc*)InterlockedIncrement; + + return MyInterlockedIncrement(pVal); +} + +#endif ///////////////////////////////////////////////////////////////////////////////////////// // MirandaStatusToMSN - status helper functions -- cgit v1.2.3