Module: wine Branch: master Commit: 591266881c4c14b913ac840ed0ae03c7e516e3d7 URL: https://source.winehq.org/git/wine.git/?a=commit;h=591266881c4c14b913ac840ed...
Author: Alexandre Julliard julliard@winehq.org Date: Thu Jun 27 16:08:22 2019 +0200
kernel32: Move semaphore functions to kernelbase.
Signed-off-by: Alexandre Julliard julliard@winehq.org
---
dlls/kernel32/kernel32.spec | 8 ++--- dlls/kernel32/sync.c | 66 -------------------------------------- dlls/kernelbase/kernelbase.spec | 8 ++--- dlls/kernelbase/sync.c | 70 +++++++++++++++++++++++++++++++++++++++++ 4 files changed, 78 insertions(+), 74 deletions(-)
diff --git a/dlls/kernel32/kernel32.spec b/dlls/kernel32/kernel32.spec index 4868df8..1b5a0ae 100644 --- a/dlls/kernel32/kernel32.spec +++ b/dlls/kernel32/kernel32.spec @@ -320,8 +320,8 @@ @ stdcall CreateRemoteThreadEx(long ptr long ptr ptr long ptr ptr) @ stdcall CreateSemaphoreA(ptr long long str) @ stdcall CreateSemaphoreExA(ptr long long str long long) -@ stdcall CreateSemaphoreExW(ptr long long wstr long long) -@ stdcall CreateSemaphoreW(ptr long long wstr) +@ stdcall -import CreateSemaphoreExW(ptr long long wstr long long) +@ stdcall -import CreateSemaphoreW(ptr long long wstr) @ stdcall CreateSocketHandle() @ stdcall CreateSymbolicLinkA(str str long) # @ stub CreateSymbolicLinkTransactedA @@ -1128,7 +1128,7 @@ # @ stub OpenProcessToken @ stdcall OpenProfileUserMapping() @ stdcall OpenSemaphoreA(long long str) -@ stdcall OpenSemaphoreW(long long wstr) +@ stdcall -import OpenSemaphoreW(long long wstr) @ stdcall OpenThread(long long long) # @ stub OpenThreadToken @ stdcall -i386 OpenVxDHandle(long) @@ -1258,7 +1258,7 @@ @ stdcall ReleaseActCtx(ptr) @ stdcall -import ReleaseMutex(long) @ stdcall ReleaseMutexWhenCallbackReturns(ptr long) ntdll.TpCallbackReleaseMutexOnCompletion -@ stdcall ReleaseSemaphore(long long ptr) +@ stdcall -import ReleaseSemaphore(long long ptr) @ stdcall ReleaseSemaphoreWhenCallbackReturns(ptr long long) ntdll.TpCallbackReleaseSemaphoreOnCompletion @ stdcall ReleaseSRWLockExclusive(ptr) ntdll.RtlReleaseSRWLockExclusive @ stdcall ReleaseSRWLockShared(ptr) ntdll.RtlReleaseSRWLockShared diff --git a/dlls/kernel32/sync.c b/dlls/kernel32/sync.c index 6bfcfee..1303ea4 100644 --- a/dlls/kernel32/sync.c +++ b/dlls/kernel32/sync.c @@ -453,15 +453,6 @@ HANDLE WINAPI DECLSPEC_HOTPATCH CreateSemaphoreA( SECURITY_ATTRIBUTES *sa, LONG
/*********************************************************************** - * CreateSemaphoreW (KERNEL32.@) - */ -HANDLE WINAPI DECLSPEC_HOTPATCH CreateSemaphoreW( SECURITY_ATTRIBUTES *sa, LONG initial, LONG max, LPCWSTR name ) -{ - return CreateSemaphoreExW( sa, initial, max, name, 0, SEMAPHORE_ALL_ACCESS ); -} - - -/*********************************************************************** * CreateSemaphoreExA (KERNEL32.@) */ HANDLE WINAPI DECLSPEC_HOTPATCH CreateSemaphoreExA( SECURITY_ATTRIBUTES *sa, LONG initial, LONG max, @@ -481,28 +472,6 @@ HANDLE WINAPI DECLSPEC_HOTPATCH CreateSemaphoreExA( SECURITY_ATTRIBUTES *sa, LON
/*********************************************************************** - * CreateSemaphoreExW (KERNEL32.@) - */ -HANDLE WINAPI DECLSPEC_HOTPATCH CreateSemaphoreExW( SECURITY_ATTRIBUTES *sa, LONG initial, LONG max, - LPCWSTR name, DWORD flags, DWORD access ) -{ - HANDLE ret = 0; - UNICODE_STRING nameW; - OBJECT_ATTRIBUTES attr; - NTSTATUS status; - - get_create_object_attributes( &attr, &nameW, sa, name ); - - status = NtCreateSemaphore( &ret, access, &attr, initial, max ); - if (status == STATUS_OBJECT_NAME_EXISTS) - SetLastError( ERROR_ALREADY_EXISTS ); - else - SetLastError( RtlNtStatusToDosError(status) ); - return ret; -} - - -/*********************************************************************** * OpenSemaphoreA (KERNEL32.@) */ HANDLE WINAPI DECLSPEC_HOTPATCH OpenSemaphoreA( DWORD access, BOOL inherit, LPCSTR name ) @@ -520,41 +489,6 @@ HANDLE WINAPI DECLSPEC_HOTPATCH OpenSemaphoreA( DWORD access, BOOL inherit, LPCS }
-/*********************************************************************** - * OpenSemaphoreW (KERNEL32.@) - */ -HANDLE WINAPI DECLSPEC_HOTPATCH OpenSemaphoreW( DWORD access, BOOL inherit, LPCWSTR name ) -{ - HANDLE ret; - UNICODE_STRING nameW; - OBJECT_ATTRIBUTES attr; - NTSTATUS status; - - if (!is_version_nt()) access = SEMAPHORE_ALL_ACCESS; - - if (!get_open_object_attributes( &attr, &nameW, inherit, name )) return 0; - - status = NtOpenSemaphore( &ret, access, &attr ); - if (status != STATUS_SUCCESS) - { - SetLastError( RtlNtStatusToDosError(status) ); - return 0; - } - return ret; -} - - -/*********************************************************************** - * ReleaseSemaphore (KERNEL32.@) - */ -BOOL WINAPI DECLSPEC_HOTPATCH ReleaseSemaphore( HANDLE handle, LONG count, LONG *previous ) -{ - NTSTATUS status = NtReleaseSemaphore( handle, count, (PULONG)previous ); - if (status) SetLastError( RtlNtStatusToDosError(status) ); - return !status; -} - - /* * Jobs */ diff --git a/dlls/kernelbase/kernelbase.spec b/dlls/kernelbase/kernelbase.spec index f0c87ae..dca79c4 100644 --- a/dlls/kernelbase/kernelbase.spec +++ b/dlls/kernelbase/kernelbase.spec @@ -214,8 +214,8 @@ @ stdcall CreateRemoteThread(long ptr long ptr long long ptr) kernel32.CreateRemoteThread @ stdcall CreateRemoteThreadEx(long ptr long ptr ptr long ptr ptr) kernel32.CreateRemoteThreadEx @ stdcall CreateRestrictedToken(long long long ptr long ptr long ptr ptr) -@ stdcall CreateSemaphoreExW(ptr long long wstr long long) kernel32.CreateSemaphoreExW -@ stdcall CreateSemaphoreW(ptr long long wstr) kernel32.CreateSemaphoreW +@ stdcall CreateSemaphoreExW(ptr long long wstr long long) +@ stdcall CreateSemaphoreW(ptr long long wstr) # @ stub CreateStateAtom # @ stub CreateStateChangeNotification # @ stub CreateStateContainer @@ -994,7 +994,7 @@ @ stdcall OpenProcess(long long long) kernel32.OpenProcess @ stdcall OpenProcessToken(long long ptr) @ stub OpenRegKey -@ stdcall OpenSemaphoreW(long long wstr) kernel32.OpenSemaphoreW +@ stdcall OpenSemaphoreW(long long wstr) # @ stub OpenState # @ stub OpenStateAtom # @ stub OpenStateExplicit @@ -1328,7 +1328,7 @@ @ stdcall ReleaseMutexWhenCallbackReturns(ptr long) kernel32.ReleaseMutexWhenCallbackReturns @ stdcall ReleaseSRWLockExclusive(ptr) kernel32.ReleaseSRWLockExclusive @ stdcall ReleaseSRWLockShared(ptr) kernel32.ReleaseSRWLockShared -@ stdcall ReleaseSemaphore(long long ptr) kernel32.ReleaseSemaphore +@ stdcall ReleaseSemaphore(long long ptr) @ stdcall ReleaseSemaphoreWhenCallbackReturns(ptr long long) kernel32.ReleaseSemaphoreWhenCallbackReturns # @ stub ReleaseStateLock @ stdcall RemapPredefinedHandleInternal(long long) diff --git a/dlls/kernelbase/sync.c b/dlls/kernelbase/sync.c index ebbb209..58d62ed 100644 --- a/dlls/kernelbase/sync.c +++ b/dlls/kernelbase/sync.c @@ -363,3 +363,73 @@ BOOL WINAPI DECLSPEC_HOTPATCH ReleaseMutex( HANDLE handle ) { return set_ntstatus( NtReleaseMutant( handle, NULL )); } + + +/*********************************************************************** + * Semaphores + ***********************************************************************/ + + +/*********************************************************************** + * CreateSemaphoreW (kernelbase.@) + */ +HANDLE WINAPI DECLSPEC_HOTPATCH CreateSemaphoreW( SECURITY_ATTRIBUTES *sa, LONG initial, + LONG max, LPCWSTR name ) +{ + return CreateSemaphoreExW( sa, initial, max, name, 0, SEMAPHORE_ALL_ACCESS ); +} + + +/*********************************************************************** + * CreateSemaphoreExW (kernelbase.@) + */ +HANDLE WINAPI DECLSPEC_HOTPATCH CreateSemaphoreExW( SECURITY_ATTRIBUTES *sa, LONG initial, LONG max, + LPCWSTR name, DWORD flags, DWORD access ) +{ + HANDLE ret = 0; + UNICODE_STRING nameW; + OBJECT_ATTRIBUTES attr; + NTSTATUS status; + + get_create_object_attributes( &attr, &nameW, sa, name ); + + status = NtCreateSemaphore( &ret, access, &attr, initial, max ); + if (status == STATUS_OBJECT_NAME_EXISTS) + SetLastError( ERROR_ALREADY_EXISTS ); + else + SetLastError( RtlNtStatusToDosError(status) ); + return ret; +} + + +/*********************************************************************** + * OpenSemaphoreW (kernelbase.@) + */ +HANDLE WINAPI DECLSPEC_HOTPATCH OpenSemaphoreW( DWORD access, BOOL inherit, LPCWSTR name ) +{ + HANDLE ret; + UNICODE_STRING nameW; + OBJECT_ATTRIBUTES attr; + NTSTATUS status; + + if (!is_version_nt()) access = SEMAPHORE_ALL_ACCESS; + + if (!get_open_object_attributes( &attr, &nameW, inherit, name )) return 0; + + status = NtOpenSemaphore( &ret, access, &attr ); + if (status != STATUS_SUCCESS) + { + SetLastError( RtlNtStatusToDosError(status) ); + return 0; + } + return ret; +} + + +/*********************************************************************** + * ReleaseSemaphore (kernelbase.@) + */ +BOOL WINAPI DECLSPEC_HOTPATCH ReleaseSemaphore( HANDLE handle, LONG count, LONG *previous ) +{ + return set_ntstatus( NtReleaseSemaphore( handle, count, (PULONG)previous )); +}