Mercurial > foo_out_sdl
diff foosdk/sdk/pfc/pp-winapi.h @ 1:20d02a178406 default tip
*: check in everything else
yay
| author | Paper <paper@tflc.us> |
|---|---|
| date | Mon, 05 Jan 2026 02:15:46 -0500 |
| parents | |
| children |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/foosdk/sdk/pfc/pp-winapi.h Mon Jan 05 02:15:46 2026 -0500 @@ -0,0 +1,105 @@ +#if !defined(PP_WINAPI_H_INCLUDED) && defined(_WIN32) +#define PP_WINAPI_H_INCLUDED + +#ifdef WINAPI_FAMILY_PARTITION + +#if ! WINAPI_FAMILY_PARTITION(WINAPI_PARTITION_DESKTOP) + +#ifndef CreateEvent // SPECIAL HACK: disable this stuff if somehow these functions are already defined + +inline HANDLE CreateEventW(LPSECURITY_ATTRIBUTES lpEventAttributes, BOOL bManualReset, BOOL bInitialState, LPCTSTR lpName) { + DWORD flags = 0; + if (bManualReset) flags |= CREATE_EVENT_MANUAL_RESET; + if (bInitialState) flags |= CREATE_EVENT_INITIAL_SET; + DWORD rights = SYNCHRONIZE | EVENT_MODIFY_STATE; + return CreateEventEx(lpEventAttributes, lpName, flags, rights); +} + +#define CreateEvent CreateEventW + +inline DWORD WaitForSingleObject(HANDLE hHandle, DWORD dwMilliseconds) { + return WaitForSingleObjectEx(hHandle, dwMilliseconds, FALSE); +} + +inline DWORD WaitForMultipleObjects(DWORD nCount, const HANDLE *lpHandles, BOOL bWaitAll, DWORD dwMilliseconds) { + return WaitForMultipleObjectsEx(nCount, lpHandles, bWaitAll, dwMilliseconds, FALSE); +} + +inline void InitializeCriticalSection(LPCRITICAL_SECTION lpCriticalSection) { + InitializeCriticalSectionEx(lpCriticalSection, 0, 0); +} + +#endif // #ifndef CreateEvent + + +#ifndef CreateMutex + +inline HANDLE CreateMutexW(LPSECURITY_ATTRIBUTES lpMutexAttributes, BOOL bInitialOwner, LPCTSTR lpName) { + DWORD rights = MUTEX_MODIFY_STATE | SYNCHRONIZE; + DWORD flags = 0; + if (bInitialOwner) flags |= CREATE_MUTEX_INITIAL_OWNER; + return CreateMutexExW(lpMutexAttributes, lpName, flags, rights); +} + +#define CreateMutex CreateMutexW + +#endif // CreateMutex + + +#ifndef FindFirstFile + +inline HANDLE FindFirstFileW(LPCTSTR lpFileName, LPWIN32_FIND_DATA lpFindFileData) { + return FindFirstFileEx(lpFileName, FindExInfoStandard, lpFindFileData, FindExSearchNameMatch, NULL, 0); +} + +#define FindFirstFile FindFirstFileW + +#endif // #ifndef FindFirstFile + +// No reliable way to detect if GetFileSizeEx is present?? Give ours another name +inline BOOL GetFileSizeEx_Fallback(HANDLE hFile, PLARGE_INTEGER lpFileSize) { + FILE_STANDARD_INFO info; + if (!GetFileInformationByHandleEx(hFile, FileStandardInfo, &info, sizeof(info))) return FALSE; + *lpFileSize = info.EndOfFile; + return TRUE; +} + +#define PP_GetFileSizeEx_Fallback_Present + +#ifndef CreateFile + +inline HANDLE CreateFileW(LPCTSTR lpFileName, DWORD dwDesiredAccess, DWORD dwShareMode, LPSECURITY_ATTRIBUTES lpSecurityAttributes, DWORD dwCreationDisposition, DWORD dwFlagsAndAttributes, HANDLE hTemplateFile) { + CREATEFILE2_EXTENDED_PARAMETERS arg = {}; + arg.dwSize = sizeof(arg); + arg.hTemplateFile = hTemplateFile; + arg.lpSecurityAttributes = lpSecurityAttributes; + arg.dwFileAttributes = dwFlagsAndAttributes & 0x0000FFFF; + arg.dwFileFlags = dwFlagsAndAttributes & 0xFFFF0000; + return CreateFile2(lpFileName, dwDesiredAccess, dwShareMode, dwCreationDisposition, &arg); +} + +#define CreateFile CreateFileW + +#endif // #ifndef CreateFile + +#ifndef GetFileAttributes + +inline DWORD GetFileAttributesW(const wchar_t * path) { + WIN32_FILE_ATTRIBUTE_DATA data = {}; + if (!GetFileAttributesEx(path, GetFileExInfoStandard, &data)) return 0xFFFFFFFF; + return data.dwFileAttributes; +} + +#define GetFileAttributes GetFileAttributesW + +#endif // #ifndef GetFileAttributes + +#endif // #if ! WINAPI_FAMILY_PARTITION(WINAPI_PARTITION_DESKTOP) + +#endif // #ifdef WINAPI_FAMILY_PARTITION + +#ifndef PP_GetFileSizeEx_Fallback_Present +#define GetFileSizeEx_Fallback GetFileSizeEx +#endif + +#endif // !defined(PP_WINAPI_H_INCLUDED) && defined(_WIN32)
