105 lines
1.5 KiB
C++
105 lines
1.5 KiB
C++
/*++
|
|
|
|
Copyright (c) 1996 Microsoft Corporation
|
|
|
|
Module Name:
|
|
|
|
kernel32.cxx
|
|
|
|
Abstract:
|
|
|
|
Windows 95 stub for kernel32 functions
|
|
|
|
Author:
|
|
|
|
Johnson Apacible (johnsona) 13-Nov-1996
|
|
|
|
--*/
|
|
|
|
|
|
#include "lonsiw95.hxx"
|
|
|
|
#pragma hdrstop
|
|
|
|
|
|
PVOID
|
|
WINAPI
|
|
FakeInterlockedCompareExchange (
|
|
PVOID *Destination,
|
|
PVOID Exchange,
|
|
PVOID Comperand
|
|
)
|
|
{
|
|
PVOID oldValue;
|
|
|
|
ACQUIRE_LOCK( &LonsiLock );
|
|
|
|
oldValue = *Destination;
|
|
|
|
if ( (ULONG_PTR)oldValue == (ULONG_PTR)Comperand ) {
|
|
*Destination = Exchange;
|
|
}
|
|
RELEASE_LOCK( &LonsiLock );
|
|
|
|
return(oldValue);
|
|
} // InterlockedCompareExchange
|
|
|
|
|
|
LONG
|
|
WINAPI
|
|
FakeInterlockedExchangeAdd(
|
|
LPLONG Addend,
|
|
LONG Value
|
|
)
|
|
{
|
|
LONG oldValue;
|
|
|
|
ACQUIRE_LOCK( &LonsiLock );
|
|
|
|
oldValue = *Addend;
|
|
*Addend = Value + oldValue;
|
|
|
|
RELEASE_LOCK( &LonsiLock );
|
|
|
|
return(oldValue);
|
|
} // InterlockedExchangeAdd
|
|
|
|
|
|
LONG
|
|
WINAPI
|
|
FakeInterlockedIncrement(
|
|
LPLONG Addend
|
|
)
|
|
{
|
|
LONG newValue;
|
|
|
|
ACQUIRE_LOCK( &LonsiLock );
|
|
|
|
*Addend += 1;
|
|
newValue = *Addend;
|
|
|
|
RELEASE_LOCK( &LonsiLock );
|
|
|
|
return(newValue);
|
|
} // InterlockedIncrement
|
|
|
|
|
|
LONG
|
|
WINAPI
|
|
FakeInterlockedDecrement(
|
|
LPLONG Addend
|
|
)
|
|
{
|
|
LONG newValue;
|
|
|
|
ACQUIRE_LOCK( &LonsiLock );
|
|
|
|
*Addend -= 1;
|
|
newValue = *Addend;
|
|
|
|
RELEASE_LOCK( &LonsiLock );
|
|
|
|
return(newValue);
|
|
} // InterlockedDecrement
|
|
|