From: drh <> Date: Wed, 13 May 2026 15:11:04 +0000 (+0000) Subject: In the Windows OS interface, use CreateFileMappingFromApp() and X-Git-Url: http://git.ipfire.org/gitweb/index.cgi?a=commitdiff_plain;h=077be44cc2b133aeb2b6c129f33303b879e82f6e;p=thirdparty%2Fsqlite.git In the Windows OS interface, use CreateFileMappingFromApp() and MapViewOfFilFromApp() if SQLITE_OS_WINRT is defined. FossilOrigin-Name: 3c51436b43ab77b88134851a2773147b49a3c4fb5b0416db5e318b6e12d3b708 --- diff --git a/manifest b/manifest index 5da059e358..a99607adbe 100644 --- a/manifest +++ b/manifest @@ -1,5 +1,5 @@ -C On\sWindows,\suse\sonly\sGetSystemTimeAsFileTime()\sand\snot\sGetSystemTime().\nAlso\sadd\sa\sTCL\sscript\sthat\swill\srenumber\sthe\ssystemcall\sthunk\sfor\sWindows. -D 2026-05-13T13:55:31.932 +C In\sthe\sWindows\sOS\sinterface,\suse\sCreateFileMappingFromApp()\sand\nMapViewOfFilFromApp()\sif\sSQLITE_OS_WINRT\sis\sdefined. +D 2026-05-13T15:11:04.511 F .fossil-settings/binary-glob 61195414528fb3ea9693577e1980230d78a1f8b0a54c78cf1b9b24d0a409ed6a x F .fossil-settings/empty-dirs dbb81e8fc0401ac46a1491ab34a7f2c7c0452f2f06b54ebb845d024ca8283ef1 F .fossil-settings/ignore-glob 35175cdfcf539b2318cb04a9901442804be81cd677d8b889fcc9149c21f239ea @@ -722,7 +722,7 @@ F src/os_common.h 6c0eb8dd40ef3e12fe585a13e709710267a258e2c8dd1c40b1948a1d14582e F src/os_kv.c e7d96727db5b67e39d590a68cc61c86daf4c093c36c011a09ebfb521182ec28d F src/os_setup.h 8efc64eda6a6c2f221387eefc2e7e45fd5a3d5c8337a7a83519ba4fbd2957ae2 F src/os_unix.c a07dce662f6c4e18098f6faa9f7ec7cf311f56ee9151bed2aad4dcd55852c9e2 -F src/os_win.c 908bde3c5d029a5f338db5e21c9dca0979060390c4a8616cee786955f6c43603 +F src/os_win.c 8b717f9ceef3dae9de9b54fe8f5b58a11fc89f8a043ec35619d0dcbce8d64629 F src/os_win.h c06ccc3a090cf54202ea58981c298817f3309d4c9e4d52ad0a02927346493721 F src/pager.c fbec9063ea139dfa5d94ce540671752b89f8e8dc38f8a1f614bab1aa04a2dd40 F src/pager.h 6137149346e6c8a3ddc1eeb40aee46381e9bc8b0fcc6dda8a1efde993c2275b8 @@ -2169,7 +2169,7 @@ F tool/omittest-msvc.tcl d6b8f501ac1d7798c4126065030f89812379012cad98a1735d6d722 F tool/omittest.tcl 436b7072e00e25e9b77145a9f67aa8e0eeabd186168827435fd03f8f981aac32 F tool/opcodesum.tcl 740ed206ba8c5040018988129abbf3089a0ccf4a F tool/pagesig.c f98909b4168d9cac11a2de7f031adea0e2f3131faa7515a72807c03ec58eafeb -F tool/renumber-win-thunk.tcl 19a06c1bd66fa9f0c58de6ee051aad1f6b956f020d71387ccbe456f048c12e8c +F tool/renumber-win-thunk.tcl d6320eeba3a1ddfa4624003ad77e96a01819e56b4df58a698c2267ea71b79d39 F tool/replace.tcl 511c61acfe563dfb58675efb4628bb158a13d48ff8322123ac447e9d25a82d9a F tool/restore_jrnl.tcl 1079ecba47cc82fa82115b81c1f68097ab1f956f357ee8da5fc4b2589af6bd98 F tool/rollback-test.c 9fc98427d1e23e84429d7e6d07d9094fbdec65a5 @@ -2205,8 +2205,8 @@ F tool/warnings-clang.sh bbf6a1e685e534c92ec2bfba5b1745f34fb6f0bc2a362850723a9ee F tool/warnings.sh a554d13f6e5cf3760f041b87939e3d616ec6961859c3245e8ef701d1eafc2ca2 F tool/win/sqlite.vsix deb315d026cc8400325c5863eef847784a219a2f F tool/winmain.c 00c8fb88e365c9017db14c73d3c78af62194d9644feaf60e220ab0f411f3604c -P 8be57f96f6a72753fd983d7b6b9924c3b60f57c5664eeb7dfe7a0799739597c0 -R 6bce906e3e36ec3e997e4af868126bac +P 4b7f0130d68c7a0b98e87d09d0a661c85554215cb111478305307960deab3921 +R dbda3f62b7f97cec2a0b0264a507d59f U drh -Z 9580b0800b750e87c90fb5dc45800b49 +Z 0e29719eca3494ab962ae7aa1c9d1542 # Remove this line to create a well-formed Fossil manifest. diff --git a/manifest.uuid b/manifest.uuid index 5feebc0581..bd41c01412 100644 --- a/manifest.uuid +++ b/manifest.uuid @@ -1 +1 @@ -4b7f0130d68c7a0b98e87d09d0a661c85554215cb111478305307960deab3921 +3c51436b43ab77b88134851a2773147b49a3c4fb5b0416db5e318b6e12d3b708 diff --git a/src/os_win.c b/src/os_win.c index b5193fed2f..da5856c748 100644 --- a/src/os_win.c +++ b/src/os_win.c @@ -383,19 +383,32 @@ static struct win_syscall { #define osCreateFileW ((HANDLE(WINAPI*)(LPCWSTR,DWORD,DWORD, \ LPSECURITY_ATTRIBUTES,DWORD,DWORD,HANDLE))aSyscall[2].pCurrent) +#if defined(SQLITE_OS_WINRT) + { "CreateFileMappingFromApp",(SYSCALL)CreateFileMappingFromApp,0 }, +#else + { "CreateFileMappingFromApp",(SYSCALL)0, 0 }, +#endif +#define osCreateFileMappingFromApp ((HANDLE(WINAPI*)(HANDLE,\ + PSECURITY_ATTRIBUTES, \ + ULONG,ULONG64,PCWSTR))aSyscall[3].pCurrent) + +#if !defined(SQLITE_OS_WINRT) { "CreateFileMappingW", (SYSCALL)CreateFileMappingW, 0 }, +#else + { "CreateFileMappingW", (SYSCALL)0, 0 }, +#endif #define osCreateFileMappingW ((HANDLE(WINAPI*)(HANDLE,LPSECURITY_ATTRIBUTES, \ - DWORD,DWORD,DWORD,LPCWSTR))aSyscall[3].pCurrent) + DWORD,DWORD,DWORD,LPCWSTR))aSyscall[4].pCurrent) { "DeleteFileW", (SYSCALL)DeleteFileW, 0 }, -#define osDeleteFileW ((BOOL(WINAPI*)(LPCWSTR))aSyscall[4].pCurrent) +#define osDeleteFileW ((BOOL(WINAPI*)(LPCWSTR))aSyscall[5].pCurrent) { "FlushFileBuffers", (SYSCALL)FlushFileBuffers, 0 }, -#define osFlushFileBuffers ((BOOL(WINAPI*)(HANDLE))aSyscall[5].pCurrent) +#define osFlushFileBuffers ((BOOL(WINAPI*)(HANDLE))aSyscall[6].pCurrent) { "FormatMessageW", (SYSCALL)FormatMessageW, 0 }, #define osFormatMessageW ((DWORD(WINAPI*)(DWORD,LPCVOID,DWORD,DWORD,LPWSTR, \ - DWORD,va_list*))aSyscall[6].pCurrent) + DWORD,va_list*))aSyscall[7].pCurrent) #if !defined(SQLITE_OMIT_LOAD_EXTENSION) { "FreeLibrary", (SYSCALL)FreeLibrary, 0 }, @@ -403,27 +416,27 @@ static struct win_syscall { { "FreeLibrary", (SYSCALL)0, 0 }, #endif -#define osFreeLibrary ((BOOL(WINAPI*)(HMODULE))aSyscall[7].pCurrent) +#define osFreeLibrary ((BOOL(WINAPI*)(HMODULE))aSyscall[8].pCurrent) { "GetCurrentProcessId", (SYSCALL)GetCurrentProcessId, 0 }, -#define osGetCurrentProcessId ((DWORD(WINAPI*)(VOID))aSyscall[8].pCurrent) +#define osGetCurrentProcessId ((DWORD(WINAPI*)(VOID))aSyscall[9].pCurrent) { "GetFileAttributesW", (SYSCALL)GetFileAttributesW, 0 }, -#define osGetFileAttributesW ((DWORD(WINAPI*)(LPCWSTR))aSyscall[9].pCurrent) +#define osGetFileAttributesW ((DWORD(WINAPI*)(LPCWSTR))aSyscall[10].pCurrent) { "GetFileAttributesExW", (SYSCALL)GetFileAttributesExW, 0 }, #define osGetFileAttributesExW ((BOOL(WINAPI*)(LPCWSTR,GET_FILEEX_INFO_LEVELS, \ - LPVOID))aSyscall[10].pCurrent) + LPVOID))aSyscall[11].pCurrent) { "GetFileSize", (SYSCALL)GetFileSize, 0 }, -#define osGetFileSize ((DWORD(WINAPI*)(HANDLE,LPDWORD))aSyscall[11].pCurrent) +#define osGetFileSize ((DWORD(WINAPI*)(HANDLE,LPDWORD))aSyscall[12].pCurrent) { "GetFullPathNameW", (SYSCALL)GetFullPathNameW, 0 }, #define osGetFullPathNameW ((DWORD(WINAPI*)(LPCWSTR,DWORD,LPWSTR, \ - LPWSTR*))aSyscall[12].pCurrent) + LPWSTR*))aSyscall[13].pCurrent) { "GetLastError", (SYSCALL)GetLastError, 0 }, -#define osGetLastError ((DWORD(WINAPI*)(VOID))aSyscall[13].pCurrent) +#define osGetLastError ((DWORD(WINAPI*)(VOID))aSyscall[14].pCurrent) #if !defined(SQLITE_OMIT_LOAD_EXTENSION) { "GetProcAddressA", (SYSCALL)GetProcAddress, 0 }, @@ -431,49 +444,49 @@ static struct win_syscall { { "GetProcAddressA", (SYSCALL)0, 0 }, #endif #define osGetProcAddressA ((FARPROC(WINAPI*)(HMODULE, \ - LPCSTR))aSyscall[14].pCurrent) + LPCSTR))aSyscall[15].pCurrent) { "GetSystemInfo", (SYSCALL)GetSystemInfo, 0 }, -#define osGetSystemInfo ((VOID(WINAPI*)(LPSYSTEM_INFO))aSyscall[15].pCurrent) +#define osGetSystemInfo ((VOID(WINAPI*)(LPSYSTEM_INFO))aSyscall[16].pCurrent) { "GetSystemTimeAsFileTime", (SYSCALL)GetSystemTimeAsFileTime, 0 }, #define osGetSystemTimeAsFileTime ((VOID(WINAPI*)( \ - LPFILETIME))aSyscall[16].pCurrent) + LPFILETIME))aSyscall[17].pCurrent) { "GetTempPathW", (SYSCALL)GetTempPathW, 0 }, -#define osGetTempPathW ((DWORD(WINAPI*)(DWORD,LPWSTR))aSyscall[17].pCurrent) +#define osGetTempPathW ((DWORD(WINAPI*)(DWORD,LPWSTR))aSyscall[18].pCurrent) { "GetTickCount64", (SYSCALL)GetTickCount64, 0 }, -#define osGetTickCount64 ((ULONGLONG(WINAPI*)(VOID))aSyscall[18].pCurrent) +#define osGetTickCount64 ((ULONGLONG(WINAPI*)(VOID))aSyscall[19].pCurrent) { "HeapAlloc", (SYSCALL)HeapAlloc, 0 }, #define osHeapAlloc ((LPVOID(WINAPI*)(HANDLE,DWORD, \ - SIZE_T))aSyscall[19].pCurrent) + SIZE_T))aSyscall[20].pCurrent) { "HeapCreate", (SYSCALL)HeapCreate, 0 }, #define osHeapCreate ((HANDLE(WINAPI*)(DWORD,SIZE_T, \ - SIZE_T))aSyscall[20].pCurrent) + SIZE_T))aSyscall[21].pCurrent) { "HeapDestroy", (SYSCALL)HeapDestroy, 0 }, -#define osHeapDestroy ((BOOL(WINAPI*)(HANDLE))aSyscall[21].pCurrent) +#define osHeapDestroy ((BOOL(WINAPI*)(HANDLE))aSyscall[22].pCurrent) { "HeapFree", (SYSCALL)HeapFree, 0 }, -#define osHeapFree ((BOOL(WINAPI*)(HANDLE,DWORD,LPVOID))aSyscall[22].pCurrent) +#define osHeapFree ((BOOL(WINAPI*)(HANDLE,DWORD,LPVOID))aSyscall[23].pCurrent) { "HeapReAlloc", (SYSCALL)HeapReAlloc, 0 }, #define osHeapReAlloc ((LPVOID(WINAPI*)(HANDLE,DWORD,LPVOID, \ - SIZE_T))aSyscall[23].pCurrent) + SIZE_T))aSyscall[24].pCurrent) { "HeapSize", (SYSCALL)HeapSize, 0 }, #define osHeapSize ((SIZE_T(WINAPI*)(HANDLE,DWORD, \ - LPCVOID))aSyscall[24].pCurrent) + LPCVOID))aSyscall[25].pCurrent) { "HeapValidate", (SYSCALL)HeapValidate, 0 }, #define osHeapValidate ((BOOL(WINAPI*)(HANDLE,DWORD, \ - LPCVOID))aSyscall[25].pCurrent) + LPCVOID))aSyscall[26].pCurrent) { "HeapCompact", (SYSCALL)HeapCompact, 0 }, -#define osHeapCompact ((UINT(WINAPI*)(HANDLE,DWORD))aSyscall[26].pCurrent) +#define osHeapCompact ((UINT(WINAPI*)(HANDLE,DWORD))aSyscall[27].pCurrent) #if !defined(SQLITE_OMIT_LOAD_EXTENSION) @@ -481,77 +494,87 @@ static struct win_syscall { #else { "LoadLibraryW", (SYSCALL)0, 0 }, #endif -#define osLoadLibraryW ((HMODULE(WINAPI*)(LPCWSTR))aSyscall[27].pCurrent) +#define osLoadLibraryW ((HMODULE(WINAPI*)(LPCWSTR))aSyscall[28].pCurrent) { "LocalFree", (SYSCALL)LocalFree, 0 }, -#define osLocalFree ((HLOCAL(WINAPI*)(HLOCAL))aSyscall[28].pCurrent) +#define osLocalFree ((HLOCAL(WINAPI*)(HLOCAL))aSyscall[29].pCurrent) { "LockFileEx", (SYSCALL)LockFileEx, 0 }, #define osLockFileEx ((BOOL(WINAPI*)(HANDLE,DWORD,DWORD,DWORD,DWORD, \ - LPOVERLAPPED))aSyscall[29].pCurrent) + LPOVERLAPPED))aSyscall[30].pCurrent) -#if !defined(SQLITE_OMIT_WAL) || SQLITE_MAX_MMAP_SIZE>0 +#if (!defined(SQLITE_OMIT_WAL) || SQLITE_MAX_MMAP_SIZE>0) \ + && !defined(SQLITE_OS_WINRT) { "MapViewOfFile", (SYSCALL)MapViewOfFile, 0 }, #else { "MapViewOfFile", (SYSCALL)0, 0 }, #endif #define osMapViewOfFile ((LPVOID(WINAPI*)(HANDLE,DWORD,DWORD,DWORD, \ - SIZE_T))aSyscall[30].pCurrent) + SIZE_T))aSyscall[31].pCurrent) + +#if (!defined(SQLITE_OMIT_WAL) || SQLITE_MAX_MMAP_SIZE>0) \ + && defined(SQLITE_OS_WINRT) + { "MapViewOfFileFromApp", (SYSCALL)MapViewOfFileFromApp, 0 }, +#else + { "MapViewOfFileFromApp", (SYSCALL)0, 0 }, +#endif +#define osMapViewOfFileFromApp ((LPVOID(WINAPI*)(HANDLE,ULONG,ULONG64, \ + SIZE_T))aSyscall[32].pCurrent) { "MultiByteToWideChar", (SYSCALL)MultiByteToWideChar, 0 }, #define osMultiByteToWideChar ((int(WINAPI*)(UINT,DWORD,LPCSTR,int,LPWSTR, \ - int))aSyscall[31].pCurrent) + int))aSyscall[33].pCurrent) { "QueryPerformanceCounter", (SYSCALL)QueryPerformanceCounter, 0 }, #define osQueryPerformanceCounter ((BOOL(WINAPI*)( \ - LARGE_INTEGER*))aSyscall[32].pCurrent) + LARGE_INTEGER*))aSyscall[34].pCurrent) { "ReadFile", (SYSCALL)ReadFile, 0 }, #define osReadFile ((BOOL(WINAPI*)(HANDLE,LPVOID,DWORD,LPDWORD, \ - LPOVERLAPPED))aSyscall[33].pCurrent) + LPOVERLAPPED))aSyscall[35].pCurrent) { "SetEndOfFile", (SYSCALL)SetEndOfFile, 0 }, -#define osSetEndOfFile ((BOOL(WINAPI*)(HANDLE))aSyscall[34].pCurrent) +#define osSetEndOfFile ((BOOL(WINAPI*)(HANDLE))aSyscall[36].pCurrent) { "SetFilePointer", (SYSCALL)SetFilePointer, 0 }, #define osSetFilePointer ((DWORD(WINAPI*)(HANDLE,LONG,PLONG, \ - DWORD))aSyscall[35].pCurrent) + DWORD))aSyscall[37].pCurrent) { "Sleep", (SYSCALL)Sleep, 0 }, -#define osSleep ((VOID(WINAPI*)(DWORD))aSyscall[36].pCurrent) +#define osSleep ((VOID(WINAPI*)(DWORD))aSyscall[38].pCurrent) { "UnlockFileEx", (SYSCALL)UnlockFileEx, 0 }, #define osUnlockFileEx ((BOOL(WINAPI*)(HANDLE,DWORD,DWORD,DWORD, \ - LPOVERLAPPED))aSyscall[37].pCurrent) + LPOVERLAPPED))aSyscall[39].pCurrent) #if !defined(SQLITE_OMIT_WAL) || SQLITE_MAX_MMAP_SIZE>0 { "UnmapViewOfFile", (SYSCALL)UnmapViewOfFile, 0 }, #else { "UnmapViewOfFile", (SYSCALL)0, 0 }, #endif -#define osUnmapViewOfFile ((BOOL(WINAPI*)(LPCVOID))aSyscall[38].pCurrent) +#define osUnmapViewOfFile ((BOOL(WINAPI*)(LPCVOID))aSyscall[40].pCurrent) { "WideCharToMultiByte", (SYSCALL)WideCharToMultiByte, 0 }, #define osWideCharToMultiByte ((int(WINAPI*)(UINT,DWORD,LPCWSTR,int,LPSTR,int, \ - LPCSTR,LPBOOL))aSyscall[39].pCurrent) + LPCSTR,LPBOOL))aSyscall[41].pCurrent) { "WriteFile", (SYSCALL)WriteFile, 0 }, #define osWriteFile ((BOOL(WINAPI*)(HANDLE,LPCVOID,DWORD,LPDWORD, \ - LPOVERLAPPED))aSyscall[40].pCurrent) + LPOVERLAPPED))aSyscall[42].pCurrent) { "WaitForSingleObject", (SYSCALL)WaitForSingleObject, 0 }, #define osWaitForSingleObject ((DWORD(WINAPI*)(HANDLE, \ - DWORD))aSyscall[41].pCurrent) + DWORD))aSyscall[43].pCurrent) { "WaitForSingleObjectEx", (SYSCALL)WaitForSingleObjectEx, 0 }, #define osWaitForSingleObjectEx ((DWORD(WINAPI*)(HANDLE,DWORD, \ - BOOL))aSyscall[42].pCurrent) + BOOL))aSyscall[44].pCurrent) { "OutputDebugStringA", (SYSCALL)OutputDebugStringA, 0 }, -#define osOutputDebugStringA ((VOID(WINAPI*)(LPCSTR))aSyscall[43].pCurrent) +#define osOutputDebugStringA ((VOID(WINAPI*)(LPCSTR))aSyscall[45].pCurrent) { "GetProcessHeap", (SYSCALL)GetProcessHeap, 0 }, -#define osGetProcessHeap ((HANDLE(WINAPI*)(VOID))aSyscall[44].pCurrent) +#define osGetProcessHeap ((HANDLE(WINAPI*)(VOID))aSyscall[46].pCurrent) /* ** NOTE: On some sub-platforms, the InterlockedCompareExchange "function" @@ -564,7 +587,7 @@ static struct win_syscall { #else { "InterlockedCompareExchange", (SYSCALL)InterlockedCompareExchange, 0 }, #define osInterlockedCompareExchange ((LONG(WINAPI*)(LONG volatile*,\ - LONG,LONG))aSyscall[45].pCurrent) + LONG,LONG))aSyscall[47].pCurrent) #endif /* defined(InterlockedCompareExchange) */ #if SQLITE_WIN32_USE_UUID @@ -572,7 +595,7 @@ static struct win_syscall { #else { "UuidCreate", (SYSCALL)0, 0 }, #endif -#define osUuidCreate ((RPC_STATUS(RPC_ENTRY*)(UUID*))aSyscall[46].pCurrent) +#define osUuidCreate ((RPC_STATUS(RPC_ENTRY*)(UUID*))aSyscall[48].pCurrent) #if SQLITE_WIN32_USE_UUID { "UuidCreateSequential", (SYSCALL)UuidCreateSequential, 0 }, @@ -580,7 +603,7 @@ static struct win_syscall { { "UuidCreateSequential", (SYSCALL)0, 0 }, #endif #define osUuidCreateSequential \ - ((RPC_STATUS(RPC_ENTRY*)(UUID*))aSyscall[47].pCurrent) + ((RPC_STATUS(RPC_ENTRY*)(UUID*))aSyscall[49].pCurrent) #if !defined(SQLITE_NO_SYNC) && SQLITE_MAX_MMAP_SIZE>0 { "FlushViewOfFile", (SYSCALL)FlushViewOfFile, 0 }, @@ -588,7 +611,7 @@ static struct win_syscall { { "FlushViewOfFile", (SYSCALL)0, 0 }, #endif #define osFlushViewOfFile \ - ((BOOL(WINAPI*)(LPCVOID,SIZE_T))aSyscall[48].pCurrent) + ((BOOL(WINAPI*)(LPCVOID,SIZE_T))aSyscall[50].pCurrent) #ifdef SQLITE_ENABLE_SETLK_TIMEOUT { "CreateEvent", (SYSCALL)CreateEvent, 0 }, @@ -596,49 +619,49 @@ static struct win_syscall { { "CreateEvent", (SYSCALL)0, 0 }, #endif #define osCreateEvent ((HANDLE(WINAPI*)(LPSECURITY_ATTRIBUTES,BOOL, \ - BOOL,LPCSTR))aSyscall[49].pCurrent) + BOOL,LPCSTR))aSyscall[51].pCurrent) #ifdef SQLITE_ENABLE_SETLK_TIMEOUT { "CancelIo", (SYSCALL)CancelIo, 0 }, #else { "CancelIo", (SYSCALL)0, 0 }, #endif -#define osCancelIo ((BOOL(WINAPI*)(HANDLE))aSyscall[50].pCurrent) +#define osCancelIo ((BOOL(WINAPI*)(HANDLE))aSyscall[52].pCurrent) #ifndef _WIN32 { "getenv", (SYSCALL)getenv, 0 }, #else { "getenv", (SYSCALL)0, 0 }, #endif -#define osGetenv ((const char *(*)(const char *))aSyscall[51].pCurrent) +#define osGetenv ((const char *(*)(const char *))aSyscall[53].pCurrent) #ifndef _WIN32 { "getcwd", (SYSCALL)getcwd, 0 }, #else { "getcwd", (SYSCALL)0, 0 }, #endif -#define osGetcwd ((char*(*)(char*,size_t))aSyscall[52].pCurrent) +#define osGetcwd ((char*(*)(char*,size_t))aSyscall[54].pCurrent) #ifndef _WIN32 { "readlink", (SYSCALL)readlink, 0 }, #else { "readlink", (SYSCALL)0, 0 }, #endif -#define osReadlink ((ssize_t(*)(const char*,char*,size_t))aSyscall[53].pCurrent) +#define osReadlink ((ssize_t(*)(const char*,char*,size_t))aSyscall[55].pCurrent) #ifndef _WIN32 { "lstat", (SYSCALL)lstat, 0 }, #else { "lstat", (SYSCALL)0, 0 }, #endif -#define osLstat ((int(*)(const char*,struct stat*))aSyscall[54].pCurrent) +#define osLstat ((int(*)(const char*,struct stat*))aSyscall[56].pCurrent) #ifndef _WIN32 { "__errno", (SYSCALL)__errno, 0 }, #else { "__errno", (SYSCALL)0, 0 }, #endif -#define osErrno (*((int*(*)(void))aSyscall[55].pCurrent)()) +#define osErrno (*((int*(*)(void))aSyscall[57].pCurrent)()) #ifndef _WIN32 { "cygwin_conv_path", (SYSCALL)cygwin_conv_path, 0 }, @@ -646,7 +669,7 @@ static struct win_syscall { { "cygwin_conv_path", (SYSCALL)0, 0 }, #endif #define osCygwin_conv_path ((size_t(*)(unsigned int, \ - const void *, void *, size_t))aSyscall[56].pCurrent) + const void *, void *, size_t))aSyscall[58].pCurrent) }; /* End of the overrideable system calls */ @@ -3604,16 +3627,26 @@ static int winShmMap( HANDLE hMap = NULL; /* file-mapping handle */ void *pMap = 0; /* Mapped memory region */ +#ifdef SQLITE_OS_WINRT + hMap = osCreateFileMappingFromApp(hShared, NULL, protect, nByte, NULL); +#else hMap = osCreateFileMappingW(hShared, NULL, protect, 0, nByte, NULL); +#endif OSTRACE(("SHM-MAP-CREATE pid=%lu, region=%d, size=%d, rc=%s\n", osGetCurrentProcessId(), pShmNode->nRegion, nByte, hMap ? "ok" : "failed")); if( hMap ){ int iOffset = pShmNode->nRegion*szRegion; int iOffsetShift = iOffset % winSysInfo.dwAllocationGranularity; +#ifdef SQLITE_OS_WINRT + pMap = osMapViewOfFileFromApp(hMap, flags, + iOffset - iOffsetShift, szRegion + iOffsetShift + ); +#else pMap = osMapViewOfFile(hMap, flags, 0, iOffset - iOffsetShift, szRegion + iOffsetShift ); +#endif OSTRACE(("SHM-MAP-MAP pid=%lu, region=%d, offset=%d, size=%d, rc=%s\n", osGetCurrentProcessId(), pShmNode->nRegion, iOffset, szRegion, pMap ? "ok" : "failed")); @@ -3746,9 +3779,13 @@ static int winMapfile(winFile *pFd, sqlite3_int64 nByte){ flags |= FILE_MAP_WRITE; } #endif +#ifdef SQLITE_OS_WINRT + pFd->hMap = osCreateFileMappingFromApp(pFd->h, NULL, protect, nMap, NULL); +#else pFd->hMap = osCreateFileMappingW(pFd->h, NULL, protect, (DWORD)((nMap>>32) & 0xffffffff), (DWORD)(nMap & 0xffffffff), NULL); +#endif if( pFd->hMap==NULL ){ pFd->lastErrno = osGetLastError(); rc = winLogError(SQLITE_IOERR_MMAP, pFd->lastErrno, @@ -3760,7 +3797,11 @@ static int winMapfile(winFile *pFd, sqlite3_int64 nByte){ } assert( (nMap % winSysInfo.dwPageSize)==0 ); assert( sizeof(SIZE_T)==sizeof(sqlite3_int64) || nMap<=0xffffffff ); +#ifdef SQLITE_OS_WINRT + pNew = osMapViewOfFileFromApp(pFd->hMap, flags, 0, (SIZE_T)nMap); +#else pNew = osMapViewOfFile(pFd->hMap, flags, 0, 0, (SIZE_T)nMap); +#endif if( pNew==NULL ){ osCloseHandle(pFd->hMap); pFd->hMap = NULL; @@ -5225,15 +5266,15 @@ int sqlite3_os_init(void){ /* Double-check that the aSyscall[] array has been constructed ** correctly. See ticket [bb3a86e890c8e96ab] */ - assert( ArraySize(aSyscall)==57 ); + assert( ArraySize(aSyscall)==59 ); assert( strcmp(aSyscall[0].zName,"AreFileApisANSI")==0 ); - assert( strcmp(aSyscall[8].zName,"GetCurrentProcessId")==0 ); - assert( strcmp(aSyscall[16].zName,"GetSystemTimeAsFileTime")==0 ); - assert( strcmp(aSyscall[24].zName,"HeapSize")==0 ); - assert( strcmp(aSyscall[32].zName,"QueryPerformanceCounter")==0 ); - assert( strcmp(aSyscall[40].zName,"WriteFile")==0 ); - assert( strcmp(aSyscall[48].zName,"FlushViewOfFile")==0 ); - assert( strcmp(aSyscall[56].zName,"cygwin_conv_path")==0 ); + assert( strcmp(aSyscall[8].zName,"FreeLibrary")==0 ); + assert( strcmp(aSyscall[16].zName,"GetSystemInfo")==0 ); + assert( strcmp(aSyscall[24].zName,"HeapReAlloc")==0 ); + assert( strcmp(aSyscall[32].zName,"MapViewOfFileFromApp")==0 ); + assert( strcmp(aSyscall[40].zName,"UnmapViewOfFile")==0 ); + assert( strcmp(aSyscall[48].zName,"UuidCreate")==0 ); + assert( strcmp(aSyscall[56].zName,"lstat")==0 ); /* get memory map allocation granularity */ memset(&winSysInfo, 0, sizeof(SYSTEM_INFO)); diff --git a/tool/renumber-win-thunk.tcl b/tool/renumber-win-thunk.tcl index 2789fbb466..d8a53b6cd7 100644 --- a/tool/renumber-win-thunk.tcl +++ b/tool/renumber-win-thunk.tcl @@ -14,11 +14,13 @@ set fd [open $FILENAME rb] set newtext {} set ctr 0 set entryPending 0 +set nocaps 0 while {![eof $fd]} { set line [gets $fd] if {$line eq "" && [eof $fd]} break if {[regexp {^#define os([A-Z][_a-zA-Z0-9]+) } $line all nm]} { - if {[regexp {^Cygwin} $nm]} {set nm [string tolower $nm]} + if {$nm eq "Getenv"} {set nocaps 1} + if {$nocaps} {set nm [string tolower $nm]} set syscall_name($ctr) $nm set syscall_idx($nm) $ctr set entryPending 1