From: drh <> Date: Wed, 13 May 2026 20:06:08 +0000 (+0000) Subject: Additional changes to the Windows VFS to try to get the system to a point X-Git-Url: http://git.ipfire.org/gitweb/index.cgi?a=commitdiff_plain;h=a8fdc0e0c09aa07f00e64b2f433ef575d33069b1;p=thirdparty%2Fsqlite.git Additional changes to the Windows VFS to try to get the system to a point where it will compile for UWP. FossilOrigin-Name: 3ddc07110dacef98c14b852dcdc4f11d1c0f4061008bf3a61e2df707b0dc6c6b --- diff --git a/manifest b/manifest index f850709b76..c1afc7c94a 100644 --- a/manifest +++ b/manifest @@ -1,5 +1,5 @@ -C Change\sto\scompile-time\soption\sthat\somits\snon-UWP\ssystem\scalls\sto\nSQLITE_UWP.\s\sTakes\ssteps\sto\seliminate\sall\snon-UWP\ssystem\scalls\swhen\sthat\ncompile-time\soption\sis\sused. -D 2026-05-13T18:07:01.202 +C Additional\schanges\sto\sthe\sWindows\sVFS\sto\stry\sto\sget\sthe\ssystem\sto\sa\spoint\nwhere\sit\swill\scompile\sfor\sUWP. +D 2026-05-13T20:06:08.009 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 c9e1a153e9060a9ce98ae447b305f74dbd619dc62f1e52c52f25f0709031554d +F src/os_win.c 40d27b5172a1c717e4a425d91481c816f6cd8d896ea8ff76cc97762e15c63726 F src/os_win.h c06ccc3a090cf54202ea58981c298817f3309d4c9e4d52ad0a02927346493721 F src/pager.c fbec9063ea139dfa5d94ce540671752b89f8e8dc38f8a1f614bab1aa04a2dd40 F src/pager.h 6137149346e6c8a3ddc1eeb40aee46381e9bc8b0fcc6dda8a1efde993c2275b8 @@ -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 3c51436b43ab77b88134851a2773147b49a3c4fb5b0416db5e318b6e12d3b708 -R 0f25f96371c055952175c297cbaf04d6 +P b167c4c96e6a753952eb4be95d6283b50a9c59f4ecf59d60cf10d8de9cb115d8 +R f066d4eda59be22d296a3e1a1cf73d03 U drh -Z 021116e6f51fa817faa469cbfc4eae38 +Z 5430e3ed6629c616c0df3c5d9bb8cb87 # Remove this line to create a well-formed Fossil manifest. diff --git a/manifest.uuid b/manifest.uuid index 2596d6aaf3..8a005ec6eb 100644 --- a/manifest.uuid +++ b/manifest.uuid @@ -1 +1 @@ -b167c4c96e6a753952eb4be95d6283b50a9c59f4ecf59d60cf10d8de9cb115d8 +3ddc07110dacef98c14b852dcdc4f11d1c0f4061008bf3a61e2df707b0dc6c6b diff --git a/src/os_win.c b/src/os_win.c index 969c617d82..b0d1e128b9 100644 --- a/src/os_win.c +++ b/src/os_win.c @@ -410,7 +410,7 @@ static struct win_syscall { #define osFormatMessageW ((DWORD(WINAPI*)(DWORD,LPCVOID,DWORD,DWORD,LPWSTR, \ DWORD,va_list*))aSyscall[7].pCurrent) -#if !defined(SQLITE_OMIT_LOAD_EXTENSION) +#if !defined(SQLITE_OMIT_LOAD_EXTENSION) && !defined(SQLITE_UWP) { "FreeLibrary", (SYSCALL)FreeLibrary, 0 }, #else { "FreeLibrary", (SYSCALL)0, 0 }, @@ -428,8 +428,9 @@ static struct win_syscall { #define osGetFileAttributesExW ((BOOL(WINAPI*)(LPCWSTR,GET_FILEEX_INFO_LEVELS, \ LPVOID))aSyscall[11].pCurrent) - { "GetFileSize", (SYSCALL)GetFileSize, 0 }, -#define osGetFileSize ((DWORD(WINAPI*)(HANDLE,LPDWORD))aSyscall[12].pCurrent) + { "GetFileSizeEx", (SYSCALL)GetFileSizeEx, 0 }, +#define osGetFileSizeEx ((BOOL(WINAPI*)(HANDLE, \ + PLARGE_INTEGER))aSyscall[12].pCurrent) { "GetFullPathNameW", (SYSCALL)GetFullPathNameW, 0 }, #define osGetFullPathNameW ((DWORD(WINAPI*)(LPCWSTR,DWORD,LPWSTR, \ @@ -438,7 +439,7 @@ static struct win_syscall { { "GetLastError", (SYSCALL)GetLastError, 0 }, #define osGetLastError ((DWORD(WINAPI*)(VOID))aSyscall[14].pCurrent) -#if !defined(SQLITE_OMIT_LOAD_EXTENSION) +#if !defined(SQLITE_OMIT_LOAD_EXTENSION) && !defined(SQLITE_UWP) { "GetProcAddressA", (SYSCALL)GetProcAddress, 0 }, #else { "GetProcAddressA", (SYSCALL)0, 0 }, @@ -525,7 +526,7 @@ static struct win_syscall { #define osHeapCompact ((UINT(WINAPI*)(HANDLE,DWORD))aSyscall[27].pCurrent) -#if !defined(SQLITE_OMIT_LOAD_EXTENSION) +#if !defined(SQLITE_OMIT_LOAD_EXTENSION) && !defined(SQLITE_UWP) { "LoadLibraryW", (SYSCALL)LoadLibraryW, 0 }, #else { "LoadLibraryW", (SYSCALL)0, 0 }, @@ -572,9 +573,9 @@ static struct win_syscall { { "SetEndOfFile", (SYSCALL)SetEndOfFile, 0 }, #define osSetEndOfFile ((BOOL(WINAPI*)(HANDLE))aSyscall[36].pCurrent) - { "SetFilePointer", (SYSCALL)SetFilePointer, 0 }, -#define osSetFilePointer ((DWORD(WINAPI*)(HANDLE,LONG,PLONG, \ - DWORD))aSyscall[37].pCurrent) + { "SetFilePointerEx", (SYSCALL)SetFilePointerEx, 0 }, +#define osSetFilePointerEx ((BOOL(WINAPI*)(HANDLE,LARGE_INTEGER,\ + PLARGE_INTEGER,DWORD))aSyscall[37].pCurrent) { "Sleep", (SYSCALL)Sleep, 0 }, #define osSleep ((VOID(WINAPI*)(DWORD))aSyscall[38].pCurrent) @@ -1754,27 +1755,11 @@ static int winHandleUnlock(HANDLE h, int iOff, int nByte){ */ static int winHandleSeek(HANDLE h, sqlite3_int64 iOffset){ int rc = SQLITE_OK; /* Return value */ + LARGE_INTEGER x; /* The offset */ - LONG upperBits; /* Most sig. 32 bits of new offset */ - LONG lowerBits; /* Least sig. 32 bits of new offset */ - DWORD dwRet; /* Value returned by SetFilePointer() */ - - upperBits = (LONG)((iOffset>>32) & 0x7fffffff); - lowerBits = (LONG)(iOffset & 0xffffffff); - - dwRet = osSetFilePointer(h, lowerBits, &upperBits, FILE_BEGIN); - - /* API oddity: If successful, SetFilePointer() returns a dword - ** containing the lower 32-bits of the new file-offset. Or, if it fails, - ** it returns INVALID_SET_FILE_POINTER. However according to MSDN, - ** INVALID_SET_FILE_POINTER may also be a valid new offset. So to determine - ** whether an error has actually occurred, it is also necessary to call - ** GetLastError(). */ - if( dwRet==INVALID_SET_FILE_POINTER ){ - DWORD lastErrno = osGetLastError(); - if( lastErrno!=NO_ERROR ){ - rc = SQLITE_IOERR_SEEK; - } + x.QuadPart = iOffset; + if( osSetFilePointerEx(h, x, 0, FILE_BEGIN)==0 ){ + rc = SQLITE_IOERR_SEEK; } OSTRACE(("SEEK file=%p, offset=%lld rc=%s\n", h, iOffset,sqlite3ErrName(rc))); return rc; @@ -2057,14 +2042,13 @@ static int winHandleTruncate(HANDLE h, sqlite3_int64 nByte){ */ static int winHandleSize(HANDLE h, sqlite3_int64 *pnByte){ int rc = SQLITE_OK; - DWORD upperBits = 0; - DWORD lowerBits = 0; - + LARGE_INTEGER x; assert( pnByte ); - lowerBits = osGetFileSize(h, &upperBits); - *pnByte = (((sqlite3_int64)upperBits)<<32) + lowerBits; - if( lowerBits==INVALID_FILE_SIZE && osGetLastError()!=NO_ERROR ){ + if( osGetFileSizeEx(h, &x)==0 ){ rc = SQLITE_IOERR_FSTAT; + *pnByte = 0; + }else{ + *pnByte = x.QuadPart; } return rc; } @@ -2265,17 +2249,14 @@ static int winFileSize(sqlite3_file *id, sqlite3_int64 *pSize){ SimulateIOError(return SQLITE_IOERR_FSTAT); OSTRACE(("SIZE file=%p, pSize=%p\n", pFile->h, pSize)); { - DWORD upperBits; - DWORD lowerBits; - DWORD lastErrno; - - lowerBits = osGetFileSize(pFile->h, &upperBits); - *pSize = (((sqlite3_int64)upperBits)<<32) + lowerBits; - if( (lowerBits == INVALID_FILE_SIZE) - && ((lastErrno = osGetLastError())!=NO_ERROR) ){ - pFile->lastErrno = lastErrno; + LARGE_INTEGER x; + if( osGetFileSizeEx(pFile->h, &x)==0 ){ + *pSize = 0; + pFile->lastErrno = osGetLastError(); rc = winLogError(SQLITE_IOERR_FSTAT, pFile->lastErrno, "winFileSize", pFile->zPath); + }else{ + *pSize = x.QuadPart; } } OSTRACE(("SIZE file=%p, pSize=%p, *pSize=%lld, rc=%s\n", @@ -4986,14 +4967,14 @@ static int winFullPathname( ** within the shared library, and closing the shared library. */ static void *winDlOpen(sqlite3_vfs *pVfs, const char *zFilename){ - HANDLE h; + HANDLE h = 0; void *zConverted = winConvertFromUtf8Filename(zFilename); UNUSED_PARAMETER(pVfs); if( zConverted==0 ){ OSTRACE(("DLOPEN name=%s, handle=%p\n", zFilename, (void*)0)); return 0; } - h = osLoadLibraryW((LPCWSTR)zConverted); + h = osLoadLibraryW ? osLoadLibraryW((LPCWSTR)zConverted) : 0; OSTRACE(("DLOPEN name=%s, handle=%p\n", zFilename, (void*)h)); sqlite3_free(zConverted); return (void*)h; @@ -5003,16 +4984,16 @@ static void winDlError(sqlite3_vfs *pVfs, int nBuf, char *zBufOut){ winGetLastErrorMsg(osGetLastError(), nBuf, zBufOut); } static void (*winDlSym(sqlite3_vfs *pVfs,void *pH,const char *zSym))(void){ - FARPROC proc; + FARPROC proc = 0; UNUSED_PARAMETER(pVfs); - proc = osGetProcAddressA((HANDLE)pH, zSym); + proc = osGetProcAddressA ? osGetProcAddressA((HANDLE)pH, zSym) : 0; OSTRACE(("DLSYM handle=%p, symbol=%s, address=%p\n", (void*)pH, zSym, (void*)proc)); return (void(*)(void))proc; } static void winDlClose(sqlite3_vfs *pVfs, void *pHandle){ UNUSED_PARAMETER(pVfs); - osFreeLibrary((HANDLE)pHandle); + if( osFreeLibrary!=0 ) osFreeLibrary((HANDLE)pHandle); OSTRACE(("DLCLOSE handle=%p\n", (void*)pHandle)); } #else /* if SQLITE_OMIT_LOAD_EXTENSION is defined: */