#if defined(_WIN32)
typedef SRWLOCK NativeRWLock;
-typedef VOID (WINAPI *InitializeSRWLockFn)(PSRWLOCK lock);
-typedef VOID (WINAPI *AcquireSRWLockSharedFn)(PSRWLOCK lock);
-typedef VOID (WINAPI *ReleaseSRWLockSharedFn)(PSRWLOCK lock);
-typedef VOID (WINAPI *AcquireSRWLockExclusiveFn)(PSRWLOCK lock);
-typedef VOID (WINAPI *ReleaseSRWLockExclusiveFn)(PSRWLOCK lock);
-
-static InitializeSRWLockFn pInitializeSRWLock;
-static AcquireSRWLockSharedFn pAcquireSRWLockShared;
-static ReleaseSRWLockSharedFn pReleaseSRWLockShared;
-static AcquireSRWLockExclusiveFn pAcquireSRWLockExclusive;
-static ReleaseSRWLockExclusiveFn pReleaseSRWLockExclusive;
-
static Bool
MXUserNativeRWSupported(void)
{
- static Bool result;
- static Bool done = FALSE;
-
- if (!done) {
- HMODULE kernel32 = GetModuleHandleW(L"kernel32.dll");
-
- if (kernel32) {
- pInitializeSRWLock = (InitializeSRWLockFn)
- GetProcAddress(kernel32,
- "InitializeSRWLock");
-
- pAcquireSRWLockShared = (AcquireSRWLockSharedFn)
- GetProcAddress(kernel32,
- "AcquireSRWLockShared");
-
- pReleaseSRWLockShared = (ReleaseSRWLockSharedFn)
- GetProcAddress(kernel32,
- "ReleaseSRWLockShared");
-
- pAcquireSRWLockExclusive = (AcquireSRWLockExclusiveFn)
- GetProcAddress(kernel32,
- "AcquireSRWLockExclusive");
-
- pReleaseSRWLockExclusive = (ReleaseSRWLockExclusiveFn)
- GetProcAddress(kernel32,
- "ReleaseSRWLockExclusive");
-
- COMPILER_MEM_BARRIER();
-
- result = ((pInitializeSRWLock != NULL) &&
- (pAcquireSRWLockShared != NULL) &&
- (pReleaseSRWLockShared != NULL) &&
- (pAcquireSRWLockExclusive != NULL) &&
- (pReleaseSRWLockExclusive != NULL));
-
- COMPILER_MEM_BARRIER();
- } else {
- result = FALSE;
- }
-
- done = TRUE;
- }
-
- return result;
+ return TRUE;
}
static Bool
MXUserNativeRWInit(NativeRWLock *lock) // IN:
{
- ASSERT(pInitializeSRWLock);
- (*pInitializeSRWLock)(lock);
+ InitializeSRWLock(lock);
return TRUE;
}
int *err) // OUT:
{
if (forRead) {
- ASSERT(pAcquireSRWLockShared);
- (*pAcquireSRWLockShared)(lock);
+ AcquireSRWLockShared(lock);
} else {
- ASSERT(pAcquireSRWLockExclusive);
- (*pAcquireSRWLockExclusive)(lock);
+ AcquireSRWLockExclusive(lock);
}
*err = 0;
Bool forRead) // IN:
{
if (forRead) {
- ASSERT(pReleaseSRWLockShared);
- (*pReleaseSRWLockShared)(lock);
+ ReleaseSRWLockShared(lock);
} else {
- ASSERT(pReleaseSRWLockExclusive);
- (*pReleaseSRWLockExclusive)(lock);
+ ReleaseSRWLockExclusive(lock);
}
return 0;
#if defined(_WIN32)
{
- /*
- * Hosted products don't support XP hosts anymore, but we use
- * GetProcAddress instead of linking statically to
- * GetDynamicTimeZoneInformation to avoid impacting Tools and Cascadia,
- * which consume this lib and still need to run on XP.
- */
DYNAMIC_TIME_ZONE_INFORMATION tzInfo = {0};
- typedef DWORD (WINAPI* PFNGetTZInfo)(PDYNAMIC_TIME_ZONE_INFORMATION);
- PFNGetTZInfo pfnGetTZInfo = NULL;
-
- pfnGetTZInfo =
- (PFNGetTZInfo) GetProcAddress(GetModuleHandleW(L"kernel32"),
- "GetDynamicTimeZoneInformation");
- if (pfnGetTZInfo == NULL ||
- pfnGetTZInfo(&tzInfo) == TIME_ZONE_ID_INVALID) {
+ if (GetDynamicTimeZoneInformation(&tzInfo) == TIME_ZONE_ID_INVALID) {
return (-1);
}