From: mistachkin Date: Wed, 18 Apr 2012 05:57:38 +0000 (+0000) Subject: Import all the latest trunk changes into the WinRT branch. Refactor and/or remove... X-Git-Tag: version-3.7.13~11^2~13 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=a749486e31f49b468fb48c9b42ac9d44530bae1a;p=thirdparty%2Fsqlite.git Import all the latest trunk changes into the WinRT branch. Refactor and/or remove WinCE-specific macros and functions used for file locking to improve clarity of presentation. FossilOrigin-Name: ad5cd15f49b286896f94ab1ff207077beee40e12 --- a749486e31f49b468fb48c9b42ac9d44530bae1a diff --cc manifest index 9e04060a33,75fe99adec..3361895e4a --- a/manifest +++ b/manifest @@@ -1,5 -1,5 +1,5 @@@ - C When\scompiling\sfor\sWinRT,\salways\suse\sthe\s'appcontainer'\slinker\soption. - D 2012-04-17T21:00:12.605 -C Improved\shandling\sof\saggregate\ssubqueries\swithin\san\saggregate\squery. -D 2012-04-17T16:38:53.916 ++C Import\sall\sthe\slatest\strunk\schanges\sinto\sthe\sWinRT\sbranch.\s\sRefactor\sand/or\sremove\sWinCE-specific\smacros\sand\sfunctions\sused\sfor\sfile\slocking\sto\simprove\sclarity\sof\spresentation. ++D 2012-04-18T05:57:38.819 F Makefile.arm-wince-mingw32ce-gcc d6df77f1f48d690bd73162294bbba7f59507c72f F Makefile.in 2f37e468503dbe79d35c9f6dffcf3fae1ae9ec20 F Makefile.linux-gcc 91d710bdc4998cb015f39edf3cb314ec4f4d7e23 @@@ -126,16 -126,16 +126,16 @@@ F src/auth.c 523da7fb4979469955d822ff92 F src/backup.c 6be23a344d3301ae38e92fddb3a33b91c309fce4 F src/bitvec.c af50f1c8c0ff54d6bdb7a80e2fceca5a93670bef F src/btmutex.c 976f45a12e37293e32cae0281b15a21d48a8aaa7 - F src/btree.c 02aeee1f6d425e11f7b9b2d9d461ac501645ed6f + F src/btree.c df800f10896bc2ddaa1125c532d6e7a7b9efc532 F src/btree.h 48a013f8964f12d944d90e4700df47b72dd6d923 - F src/btreeInt.h 26d8ca625b141927fe6620c1d2cf58eaf494ca0c - F src/build.c 139dc386ebdaa78d2198247ebcf003305a5babe3 - F src/callback.c 0425c6320730e6d3981acfb9202c1bed9016ad1a + F src/btreeInt.h 38a639c0542c29fe8331a221c4aed0cb8686249e + F src/build.c 987c6933ea170e443dc6a79d52f8d2506206b12b + F src/callback.c 0cb4228cdcd827dcc5def98fb099edcc9142dbcd F src/complete.c dc1d136c0feee03c2f7550bafc0d29075e36deac -F src/ctime.c a9c26822515f81ec21588cbb482ca6724be02e33 +F src/ctime.c 500d019da966631ad957c37705642be87524463b F src/date.c 067a81c9942c497aafd2c260e13add8a7d0c7dd4 F src/delete.c 4c20ea4f6213b3bc1c6a510586864b679946e05e - F src/expr.c 7e40ea9f6899e31134be3c1b88b8347cf9ec40d7 + F src/expr.c 1b2383adc4391ddae38abb71fd4690a3af8efb01 F src/fault.c 160a0c015b6c2629d3899ed2daf63d75754a32bb F src/fkey.c 657212460bf5cfd3ae607d12ea62092844c227b5 F src/func.c c6b3c94320253a35bda43fb69cc292618e3285d6 @@@ -161,17 -161,17 +161,17 @@@ F src/mutex.h 2a79e0c10c26412546b501ee0 F src/mutex_noop.c 7682796b7d8d39bf1c138248858efcd10c9e1553 F src/mutex_os2.c 882d735098c07c8c6a5472b8dd66e19675fe117f F src/mutex_unix.c c3a4e00f96ba068a8dbef34084465979aaf369cc -F src/mutex_w32.c 5e54f3ba275bcb5d00248b8c23107df2e2f73e33 +F src/mutex_w32.c 1170f64d08dc35cd43f6d0bfa833cac5da979279 F src/notify.c 976dd0f6171d4588e89e874fcc765e92914b6d30 F src/os.c e1acdc09ff3ac2412945cca9766e2dcf4675f31c -F src/os.h 59beba555b65a450bd1d804220532971d4299f60 +F src/os.h 38aabd5e3ecd4162332076f55bb09cec02165cca F src/os_common.h 92815ed65f805560b66166e3583470ff94478f04 F src/os_os2.c 4a75888ba3dfc820ad5e8177025972d74d7f2440 - F src/os_unix.c 0e3d2942d228d0366fb80a3640f35caf413b66d1 - F src/os_win.c 6f8080e783082d3d94ea56537f2248df4e273843 + F src/os_unix.c 424d46e0edab969293c2223f09923b2178171f47 -F src/os_win.c 5e9e933a412ab35de2a6506b3c6a8295b31b309e ++F src/os_win.c c3487c9c506c1253bb4c65abc3caf988b9addb6c F src/pager.c 85988507fa20acc60defb834722eddf4633e4aeb F src/pager.h ef1eaf8593e78f73885c1dfac27ad83bee23bdc5 - F src/parse.y 537c8db136af5f481630becdc0c8bdd36a704c30 + F src/parse.y eb054bb40a5bf90d3422a01ed0e5df229461727a F src/pcache.c f8043b433a57aba85384a531e3937a804432a346 F src/pcache.h 1b5dcc3dc8103d03e625b177023ee67764fa6b7c F src/pcache1.c b30b1c35908346ecc43d8d9d17f2ddf6817f8f60 @@@ -179,23 -179,23 +179,23 @@@ F src/pragma.c 149d8400ff783741d4138917 F src/prepare.c ec4989f7f480544bdc4192fe663470d2a2d7d61e F src/printf.c 7ffb4ebb8b341f67e049695ba031da717b3d2699 F src/random.c cd4a67b3953b88019f8cd4ccd81394a8ddfaba50 - F src/resolve.c 3d3e80a98f203ac6b9329e9621e29eda85ddfd40 - F src/rowset.c 69afa95a97c524ba6faf3805e717b5b7ae85a697 - F src/select.c f6f141cb1ea13f1e6564d3e162700e4937baa2a1 - F src/shell.c abf18d6ee54f2631860a98fdd7ab1327f470db67 - F src/sqlite.h.in d7f0850ad874328e7ca477f836e8c5d189fbc7a2 + F src/resolve.c 969ec2bc52db1b068054ecf5ddc74f244102a71d + F src/rowset.c f6a49f3e9579428024662f6e2931832511f831a1 + F src/select.c d7b9018b7dd2e821183d69477ab55c39b8272335 + F src/shell.c 11185a9a4574f363bd4268a2780d37480ae00040 -F src/sqlite.h.in 4338f299fc83dada8407358d585c0e240ecb76a3 ++F src/sqlite.h.in 21eb2ff783710a8cf2b435890dc1ffc750058169 F src/sqlite3ext.h 6904f4aadf976f95241311fbffb00823075d9477 - F src/sqliteInt.h 3756ece33f1e7f8fe2adf8e523566825c809316e + F src/sqliteInt.h c5e917c4f1453f3972b1fd0c81105dfe4f09cc32 F src/sqliteLimit.h 164b0e6749d31e0daa1a4589a169d31c0dec7b3d F src/status.c 35939e7e03abf1b7577ce311f48f682c40de3208 F src/table.c 2cd62736f845d82200acfa1287e33feb3c15d62e F src/tclsqlite.c 086dfdd72e5892de223968a258e1ccbd9693e717 - F src/test1.c 1a1df7eed3e8b58987b5716de7a37cc79a10f3f2 -F src/test1.c 8631f728c9c3afcf79e3e22b510e451435e3d15e ++F src/test1.c 9667a33a4fc849ce668501ae21cf6fb04898c6a9 F src/test2.c 711555927f1f7e8db9aab86b512bc6934a774abe - F src/test3.c 91d3f1a09cfae3533ef17d8b484a160f3d1f1a21 + F src/test3.c f82399ec50d9cd7378bf9d6db6c1409d5e77b042 F src/test4.c d1e5a5e904d4b444cf572391fdcb017638e36ff7 F src/test5.c a6d1ac55ac054d0b2b8f37b5e655b6c92645a013 - F src/test6.c 846ed1ed2f470de9b1e205fe3878a12e237b3e19 + F src/test6.c 3329df2dbc0293031d763947ec08c9eef982ef1d F src/test7.c 2e0781754905c8adc3268d8f0967e7633af58843 F src/test8.c 61b41d79509a479dec1ac32b6d4209b27c4b1ba5 F src/test9.c bea1e8cf52aa93695487badedd6e1886c321ea60 @@@ -203,7 -203,7 +203,7 @@@ F src/test_async.c 0612a752896fad42d55c F src/test_autoext.c 30e7bd98ab6d70a62bb9ba572e4c7df347fe645e F src/test_backup.c c129c91127e9b46e335715ae2e75756e25ba27de F src/test_btree.c 47cd771250f09cdc6e12dda5bc71bc0b3abc96e2 - F src/test_config.c f82aa7dd51f42256ac18ffba3217ebffa9db85a3 -F src/test_config.c 0de329e736eb4aa5845069bed630e5c72f012264 ++F src/test_config.c 16f4bcb82fa82b39e92c8de49962a63b87e5faad F src/test_demovfs.c 20a4975127993f4959890016ae9ce5535a880094 F src/test_devsym.c e7498904e72ba7491d142d5c83b476c4e76993bc F src/test_func.c 6232d722a4ddb193035aa13a03796bf57d6c12fd @@@ -650,8 -650,8 +650,8 @@@ F test/progress.test 5b075c3c790c7b2a61 F test/ptrchng.test ef1aa72d6cf35a2bbd0869a649b744e9d84977fc F test/quick.test 1681febc928d686362d50057c642f77a02c62e57 F test/quota-glob.test 32901e9eed6705d68ca3faee2a06b73b57cb3c26 -F test/quota.test c2f778dab4c7fb07bcfa962cc5c762f36d8061dc -F test/quota2.test bc9fdb2e46aace691c1a01a9cc8d097bd4d7c1ab +F test/quota.test b5b3eec55a059e0fe493c66c6e27bd2c07676cfd - F test/quota2.test 8ce58614614cd2b4eb70cd378e616811aed7b34e ++F test/quota2.test de299a13c41e90101e48a725e31f9b7425da1356 F test/quote.test 215897dbe8de1a6f701265836d6601cc6ed103e6 F test/randexpr1.tcl 40dec52119ed3a2b8b2a773bce24b63a3a746459 F test/randexpr1.test eda062a97e60f9c38ae8d806b03b0ddf23d796df @@@ -997,9 -998,9 +998,9 @@@ F tool/symbols-mingw.sh 4dbcea7e7476830 F tool/symbols.sh fec58532668296d7c7dc48be9c87f75ccdb5814f F tool/tostr.awk e75472c2f98dd76e06b8c9c1367f4ab07e122d06 F tool/vdbe-compress.tcl d70ea6d8a19e3571d7ab8c9b75cba86d1173ff0f - F tool/warnings-clang.sh 9f406d66e750e8ac031c63a9ef3248aaa347ef2a + F tool/warnings-clang.sh a8a0a3babda96dfb1ff51adda3cbbf3dfb7266c2 F tool/warnings.sh fbc018d67fd7395f440c28f33ef0f94420226381 - P a1a85b846aac07979e732a9f36d178bd567e103a - R 4b6ce0aef842e29a9d007bcf92b1249b -P 8e2363ad76446e863d03ead91fd621e59d5cb495 -R f4f12ce6163c2f6bb1a71deb9cb7039c -U drh -Z 58b2a5ebe7a572f77bef677b95126ab0 ++P 300bcfe31102d4428567d56810b57d1d54c1d43b 430bb59d798286a86c351de92c429345f016b3f0 ++R f8499f4b4cfea9459167b2ec1c6f0e24 +U mistachkin - Z ed5b0893d8bcb11e5301ff71a81a98a7 ++Z c68bf45e8579755b27c882f840c88e2c diff --cc manifest.uuid index 13c7678f8f,59d3d01d77..52453a246b --- a/manifest.uuid +++ b/manifest.uuid @@@ -1,1 -1,1 +1,1 @@@ - 300bcfe31102d4428567d56810b57d1d54c1d43b -430bb59d798286a86c351de92c429345f016b3f0 ++ad5cd15f49b286896f94ab1ff207077beee40e12 diff --cc src/os_win.c index 45fae46daa,358b70c128..dfa62a7f4c --- a/src/os_win.c +++ b/src/os_win.c @@@ -221,40 -186,27 +221,20 @@@ static int sqlite3_os_type = 0 # define SYSCALL sqlite3_syscall_ptr #endif --#if SQLITE_OS_WINCE --/* --** These macros are necessary because Windows CE does not natively support the --** Win32 APIs LockFile, UnlockFile, and LockFileEx. -- */ -- --# define LockFile(a,b,c,d,e) winceLockFile(&a, b, c, d, e) --# define UnlockFile(a,b,c,d,e) winceUnlockFile(&a, b, c, d, e) --# define LockFileEx(a,b,c,d,e,f) winceLockFileEx(&a, b, c, d, e, f) - - /* - ** These are the special syscall hacks for Windows CE. The locking related - ** defines here refer to the macros defined just above. - */ - - # define osLockFile LockFile - # define osUnlockFile UnlockFile - # define osLockFileEx LockFileEx - #endif -- /* -** These are the special syscall hacks for Windows CE. The locking related -** defines here refer to the macros defined just above. +** This function is not available on Windows CE or WinRT. */ +#if SQLITE_OS_WINCE || SQLITE_OS_WINRT # define osAreFileApisANSI() 1 -# define osLockFile LockFile -# define osUnlockFile UnlockFile -# define osLockFileEx LockFileEx #endif +/* +** Many system calls are accessed through pointer-to-functions so that +** they may be overridden at runtime to facilitate fault injection during +** testing and sandboxing. The following array holds the names and pointers +** to all overrideable system calls. +*/ static struct win_syscall { const char *zName; /* Name of the sytem call */ sqlite3_syscall_ptr pCurrent; /* Current value of the system call */ @@@ -702,112 -611,7 +682,116 @@@ { "WriteFile", (SYSCALL)WriteFile, 0 }, #define osWriteFile ((BOOL(WINAPI*)(HANDLE,LPCVOID,DWORD,LPDWORD, \ - LPOVERLAPPED))aSyscall[59].pCurrent) + LPOVERLAPPED))aSyscall[58].pCurrent) + +#if !SQLITE_OS_WINCE + { "CreateEventExW", (SYSCALL)CreateEventExW, 0 }, +#else + { "CreateEventExW", (SYSCALL)0, 0 }, +#endif + +#define osCreateEventExW ((HANDLE(WINAPI*)(LPSECURITY_ATTRIBUTES,LPCWSTR, \ + DWORD,DWORD))aSyscall[59].pCurrent) + +#if !SQLITE_OS_WINRT + { "WaitForSingleObject", (SYSCALL)WaitForSingleObject, 0 }, +#else + { "WaitForSingleObject", (SYSCALL)0, 0 }, +#endif + +#define osWaitForSingleObject ((DWORD(WINAPI*)(HANDLE, \ + DWORD))aSyscall[60].pCurrent) + +#if !SQLITE_OS_WINCE + { "WaitForSingleObjectEx", (SYSCALL)WaitForSingleObjectEx, 0 }, +#else + { "WaitForSingleObjectEx", (SYSCALL)0, 0 }, +#endif + +#define osWaitForSingleObjectEx ((DWORD(WINAPI*)(HANDLE,DWORD, \ + BOOL))aSyscall[61].pCurrent) + +#if !SQLITE_OS_WINCE + { "SetFilePointerEx", (SYSCALL)SetFilePointerEx, 0 }, +#else + { "SetFilePointerEx", (SYSCALL)0, 0 }, +#endif + +#define osSetFilePointerEx ((BOOL(WINAPI*)(HANDLE,LARGE_INTEGER, \ + PLARGE_INTEGER,DWORD))aSyscall[62].pCurrent) + +#if !SQLITE_OS_WINCE + { "GetFileInformationByHandleEx", (SYSCALL)GetFileInformationByHandleEx, 0 }, +#else + { "GetFileInformationByHandleEx", (SYSCALL)0, 0 }, +#endif + +#define osGetFileInformationByHandleEx ((BOOL(WINAPI*)(HANDLE, \ + FILE_INFO_BY_HANDLE_CLASS,LPVOID,DWORD))aSyscall[63].pCurrent) + ++#if !SQLITE_OS_WINCE + { "MapViewOfFileEx", (SYSCALL)MapViewOfFileEx, 0 }, ++#else ++ { "MapViewOfFileEx", (SYSCALL)0, 0 }, ++#endif + +#define osMapViewOfFileEx ((LPVOID(WINAPI*)(HANDLE,DWORD,DWORD,DWORD,SIZE_T, \ + LPVOID))aSyscall[64].pCurrent) + +#if SQLITE_OS_WINRT + { "CreateFile2", (SYSCALL)CreateFile2, 0 }, +#else + { "CreateFile2", (SYSCALL)0, 0 }, +#endif + +#define osCreateFile2 ((HANDLE(WINAPI*)(LPCWSTR,DWORD,DWORD,DWORD, \ + LPCREATEFILE2_EXTENDED_PARAMETERS))aSyscall[65].pCurrent) + +#if SQLITE_OS_WINRT + { "LoadPackagedLibrary", (SYSCALL)LoadPackagedLibrary, 0 }, +#else + { "LoadPackagedLibrary", (SYSCALL)0, 0 }, +#endif + +#define osLoadPackagedLibrary ((HMODULE(WINAPI*)(LPCWSTR, \ + DWORD))aSyscall[66].pCurrent) + +#if SQLITE_OS_WINRT + { "GetTickCount64", (SYSCALL)GetTickCount64, 0 }, +#else + { "GetTickCount64", (SYSCALL)0, 0 }, +#endif + +#define osGetTickCount64 ((ULONGLONG(WINAPI*)(VOID))aSyscall[67].pCurrent) + +#if SQLITE_OS_WINRT + { "GetNativeSystemInfo", (SYSCALL)GetNativeSystemInfo, 0 }, +#else + { "GetNativeSystemInfo", (SYSCALL)0, 0 }, +#endif + +#define osGetNativeSystemInfo ((VOID(WINAPI*)( \ + LPSYSTEM_INFO))aSyscall[68].pCurrent) + +#if defined(SQLITE_WIN32_HAS_ANSI) + { "OutputDebugStringA", (SYSCALL)OutputDebugStringA, 0 }, +#else + { "OutputDebugStringA", (SYSCALL)0, 0 }, +#endif + +#define osOutputDebugStringA ((VOID(WINAPI*)(LPCSTR))aSyscall[69].pCurrent) + +#if defined(SQLITE_WIN32_HAS_WIDE) + { "OutputDebugStringW", (SYSCALL)OutputDebugStringW, 0 }, +#else + { "OutputDebugStringW", (SYSCALL)0, 0 }, +#endif + +#define osOutputDebugStringW ((VOID(WINAPI*)(LPCWSTR))aSyscall[70].pCurrent) + + { "GetProcessHeap", (SYSCALL)GetProcessHeap, 0 }, + +#define osGetProcessHeap ((HANDLE(WINAPI*)(VOID))aSyscall[71].pCurrent) }; /* End of the overrideable system calls */ @@@ -1703,7 -1382,7 +1644,7 @@@ static void winceDestroyLock(winFile *p ** An implementation of the LockFile() API of Windows for CE */ static BOOL winceLockFile( -- HANDLE *phFile, ++ LPHANDLE phFile, DWORD dwFileOffsetLow, DWORD dwFileOffsetHigh, DWORD nNumberOfBytesToLockLow, @@@ -1767,7 -1446,7 +1708,7 @@@ ** An implementation of the UnlockFile API of Windows for CE */ static BOOL winceUnlockFile( -- HANDLE *phFile, ++ LPHANDLE phFile, DWORD dwFileOffsetLow, DWORD dwFileOffsetHigh, DWORD nNumberOfBytesToUnlockLow, @@@ -1824,34 -1503,34 +1765,73 @@@ winceMutexRelease(pFile->hMutex); return bReturn; } ++/* ++** End of the special code for wince ++*****************************************************************************/ ++#endif /* SQLITE_OS_WINCE */ /* --** An implementation of the LockFileEx() API of Windows for CE ++** Lock a file region. */ --static BOOL winceLockFileEx( -- HANDLE *phFile, -- DWORD dwFlags, -- DWORD dwReserved, -- DWORD nNumberOfBytesToLockLow, -- DWORD nNumberOfBytesToLockHigh, -- LPOVERLAPPED lpOverlapped ++static BOOL winLockFile( ++ LPHANDLE phFile, ++ DWORD flags, ++ DWORD offsetLow, ++ DWORD offsetHigh, ++ DWORD numBytesLow, ++ DWORD numBytesHigh ){ -- UNUSED_PARAMETER(dwReserved); -- UNUSED_PARAMETER(nNumberOfBytesToLockHigh); -- -- /* If the caller wants a shared read lock, forward this call -- ** to winceLockFile */ -- if (lpOverlapped->Offset == (DWORD)SHARED_FIRST && -- dwFlags == 1 && -- nNumberOfBytesToLockLow == (DWORD)SHARED_SIZE){ -- return winceLockFile(phFile, SHARED_FIRST, 0, 1, 0); ++#if SQLITE_OS_WINCE ++ /* ++ ** NOTE: Windows CE is handled differently here due its lack of the Win32 ++ ** API LockFile. ++ */ ++ return winceLockFile(phFile, offsetLow, offsetHigh, ++ numBytesLow, numBytesHigh); ++#else ++ if( isNT() ){ ++ OVERLAPPED ovlp; ++ memset(&ovlp, 0, sizeof(OVERLAPPED)); ++ ovlp.Offset = offsetLow; ++ ovlp.OffsetHigh = offsetHigh; ++ return osLockFileEx(*phFile, flags, 0, numBytesLow, numBytesHigh, &ovlp); ++ }else{ ++ return osLockFile(*phFile, offsetLow, offsetHigh, numBytesLow, ++ numBytesHigh); } -- return FALSE; ++#endif } ++ /* --** End of the special code for wince --*****************************************************************************/ --#endif /* SQLITE_OS_WINCE */ ++** Unlock a file region. ++ */ ++static BOOL winUnlockFile( ++ LPHANDLE phFile, ++ DWORD offsetLow, ++ DWORD offsetHigh, ++ DWORD numBytesLow, ++ DWORD numBytesHigh ++){ ++#if SQLITE_OS_WINCE ++ /* ++ ** NOTE: Windows CE is handled differently here due its lack of the Win32 ++ ** API UnlockFile. ++ */ ++ return winceUnlockFile(phFile, offsetLow, offsetHigh, ++ numBytesLow, numBytesHigh); ++#else ++ if( isNT() ){ ++ OVERLAPPED ovlp; ++ memset(&ovlp, 0, sizeof(OVERLAPPED)); ++ ovlp.Offset = offsetLow; ++ ovlp.OffsetHigh = offsetHigh; ++ return osUnlockFileEx(*phFile, 0, numBytesLow, numBytesHigh, &ovlp); ++ }else{ ++ return osUnlockFile(*phFile, offsetLow, offsetHigh, numBytesLow, ++ numBytesHigh); ++ } ++#endif ++} /***************************************************************************** ** The next group of routines implement the I/O methods specified @@@ -2258,18 -1899,22 +2262,26 @@@ static int winFileSize(sqlite3_file *id static int getReadLock(winFile *pFile){ int res; if( isNT() ){ - res = winLockFile(pFile->h, SQLITE_LOCKFILEEX_FLAGS, SHARED_FIRST, 0, - OVERLAPPED ovlp; - ovlp.Offset = SHARED_FIRST; - ovlp.OffsetHigh = 0; - ovlp.hEvent = 0; - res = osLockFileEx(pFile->h, LOCKFILE_FAIL_IMMEDIATELY, - 0, SHARED_SIZE, 0, &ovlp); -/* isNT() is 1 if SQLITE_OS_WINCE==1, so this else is never executed. -*/ -#if SQLITE_OS_WINCE==0 - }else{ ++#if SQLITE_OS_WINCE ++ /* ++ ** NOTE: Windows CE is handled differently here due its lack of the Win32 ++ ** API LockFileEx. ++ */ ++ res = winceLockFile(&pFile->h, SHARED_FIRST, 0, 1, 0); ++#else ++ res = winLockFile(&pFile->h, SQLITE_LOCKFILEEX_FLAGS, SHARED_FIRST, 0, + SHARED_SIZE, 0); ++#endif + } +#ifdef SQLITE_WIN32_HAS_ANSI + else{ int lk; sqlite3_randomness(sizeof(lk), &lk); pFile->sharedLockByte = (short)((lk & 0x7fffffff)%(SHARED_SIZE - 1)); - res = winLockFile(pFile->h, SQLITE_LOCKFILE_FLAGS, - res = osLockFile(pFile->h, SHARED_FIRST+pFile->sharedLockByte, 0, 1, 0); -#endif ++ res = winLockFile(&pFile->h, SQLITE_LOCKFILE_FLAGS, + SHARED_FIRST+pFile->sharedLockByte, 0, 1, 0); } +#endif if( res == 0 ){ pFile->lastErrno = osGetLastError(); /* No need to log a failure to lock */ @@@ -2284,13 -1929,14 +2296,13 @@@ static int unlockReadLock(winFile *pFil int res; DWORD lastErrno; if( isNT() ){ - res = winUnlockFile(pFile->h, SHARED_FIRST, 0, SHARED_SIZE, 0); - res = osUnlockFile(pFile->h, SHARED_FIRST, 0, SHARED_SIZE, 0); -/* isNT() is 1 if SQLITE_OS_WINCE==1, so this else is never executed. -*/ -#if SQLITE_OS_WINCE==0 - }else{ - res = osUnlockFile(pFile->h, SHARED_FIRST + pFile->sharedLockByte, 0, 1, 0); -#endif ++ res = winUnlockFile(&pFile->h, SHARED_FIRST, 0, SHARED_SIZE, 0); + } +#ifdef SQLITE_WIN32_HAS_ANSI + else{ - res = winUnlockFile(pFile->h, SHARED_FIRST+pFile->sharedLockByte, 0, 1, 0); ++ res = winUnlockFile(&pFile->h, SHARED_FIRST+pFile->sharedLockByte, 0, 1, 0); } +#endif if( res==0 && ((lastErrno = osGetLastError())!=ERROR_NOT_LOCKED) ){ pFile->lastErrno = lastErrno; winLogError(SQLITE_IOERR_UNLOCK, pFile->lastErrno, @@@ -2361,8 -2007,7 +2373,8 @@@ static int winLock(sqlite3_file *id, in && (pFile->locktype==RESERVED_LOCK)) ){ int cnt = 3; - while( cnt-->0 && (res = winLockFile(pFile->h, SQLITE_LOCKFILE_FLAGS, - while( cnt-->0 && (res = osLockFile(pFile->h, PENDING_BYTE, 0, 1, 0))==0 ){ ++ while( cnt-->0 && (res = winLockFile(&pFile->h, SQLITE_LOCKFILE_FLAGS, + PENDING_BYTE, 0, 1, 0))==0 ){ /* Try 3 times to get the pending lock. This is needed to work ** around problems caused by indexing and/or anti-virus software on ** Windows systems. @@@ -2394,7 -2039,7 +2406,7 @@@ */ if( locktype==RESERVED_LOCK && res ){ assert( pFile->locktype==SHARED_LOCK ); - res = winLockFile(pFile->h, SQLITE_LOCKFILE_FLAGS, RESERVED_BYTE, 0, 1, 0); - res = osLockFile(pFile->h, RESERVED_BYTE, 0, 1, 0); ++ res = winLockFile(&pFile->h, SQLITE_LOCKFILE_FLAGS, RESERVED_BYTE, 0, 1, 0); if( res ){ newLocktype = RESERVED_LOCK; }else{ @@@ -2415,8 -2060,7 +2427,8 @@@ assert( pFile->locktype>=SHARED_LOCK ); res = unlockReadLock(pFile); OSTRACE(("unreadlock = %d\n", res)); - res = winLockFile(pFile->h, SQLITE_LOCKFILE_FLAGS, SHARED_FIRST, 0, - res = osLockFile(pFile->h, SHARED_FIRST, 0, SHARED_SIZE, 0); ++ res = winLockFile(&pFile->h, SQLITE_LOCKFILE_FLAGS, SHARED_FIRST, 0, + SHARED_SIZE, 0); if( res ){ newLocktype = EXCLUSIVE_LOCK; }else{ @@@ -2430,7 -2074,7 +2442,7 @@@ ** release it now. */ if( gotPendingLock && locktype==SHARED_LOCK ){ - winUnlockFile(pFile->h, PENDING_BYTE, 0, 1, 0); - osUnlockFile(pFile->h, PENDING_BYTE, 0, 1, 0); ++ winUnlockFile(&pFile->h, PENDING_BYTE, 0, 1, 0); } /* Update the state of the lock has held in the file descriptor then @@@ -2464,9 -2108,9 +2476,9 @@@ static int winCheckReservedLock(sqlite3 rc = 1; OSTRACE(("TEST WR-LOCK %d %d (local)\n", pFile->h, rc)); }else{ - rc = winLockFile(pFile->h, SQLITE_LOCKFILE_FLAGS, RESERVED_BYTE, 0, 1, 0); - rc = osLockFile(pFile->h, RESERVED_BYTE, 0, 1, 0); ++ rc = winLockFile(&pFile->h, SQLITE_LOCKFILE_FLAGS, RESERVED_BYTE, 0, 1, 0); if( rc ){ - winUnlockFile(pFile->h, RESERVED_BYTE, 0, 1, 0); - osUnlockFile(pFile->h, RESERVED_BYTE, 0, 1, 0); ++ winUnlockFile(&pFile->h, RESERVED_BYTE, 0, 1, 0); } rc = !rc; OSTRACE(("TEST WR-LOCK %d %d (remote)\n", pFile->h, rc)); @@@ -2496,7 -2140,7 +2508,7 @@@ static int winUnlock(sqlite3_file *id, pFile->locktype, pFile->sharedLockByte)); type = pFile->locktype; if( type>=EXCLUSIVE_LOCK ){ - winUnlockFile(pFile->h, SHARED_FIRST, 0, SHARED_SIZE, 0); - osUnlockFile(pFile->h, SHARED_FIRST, 0, SHARED_SIZE, 0); ++ winUnlockFile(&pFile->h, SHARED_FIRST, 0, SHARED_SIZE, 0); if( locktype==SHARED_LOCK && !getReadLock(pFile) ){ /* This should never happen. We should always be able to ** reacquire the read lock */ @@@ -2505,13 -2149,13 +2517,13 @@@ } } if( type>=RESERVED_LOCK ){ - winUnlockFile(pFile->h, RESERVED_BYTE, 0, 1, 0); - osUnlockFile(pFile->h, RESERVED_BYTE, 0, 1, 0); ++ winUnlockFile(&pFile->h, RESERVED_BYTE, 0, 1, 0); } if( locktype==NO_LOCK && type>=SHARED_LOCK ){ unlockReadLock(pFile); } if( type>=PENDING_LOCK ){ - winUnlockFile(pFile->h, PENDING_BYTE, 0, 1, 0); - osUnlockFile(pFile->h, PENDING_BYTE, 0, 1, 0); ++ winUnlockFile(&pFile->h, PENDING_BYTE, 0, 1, 0); } pFile->locktype = (u8)locktype; return rc; @@@ -2754,14 -2400,18 +2766,14 @@@ static int winShmSystemLock /* Access to the winShmNode object is serialized by the caller */ assert( sqlite3_mutex_held(pFile->mutex) || pFile->nRef==0 ); - /* Initialize the locking parameters */ - dwFlags = LOCKFILE_FAIL_IMMEDIATELY; - if( lockType == _SHM_WRLCK ) dwFlags |= LOCKFILE_EXCLUSIVE_LOCK; - - memset(&ovlp, 0, sizeof(OVERLAPPED)); - ovlp.Offset = ofst; - /* Release/Acquire the system-level lock */ if( lockType==_SHM_UNLCK ){ - rc = winUnlockFile(pFile->hFile.h, ofst, 0, nByte, 0); - rc = osUnlockFileEx(pFile->hFile.h, 0, nByte, 0, &ovlp); ++ rc = winUnlockFile(&pFile->hFile.h, ofst, 0, nByte, 0); }else{ - rc = osLockFileEx(pFile->hFile.h, dwFlags, 0, nByte, 0, &ovlp); + /* Initialize the locking parameters */ + DWORD dwFlags = LOCKFILE_FAIL_IMMEDIATELY; + if( lockType == _SHM_WRLCK ) dwFlags |= LOCKFILE_EXCLUSIVE_LOCK; - rc = winLockFile(pFile->hFile.h, dwFlags, ofst, 0, nByte, 0); ++ rc = winLockFile(&pFile->hFile.h, dwFlags, ofst, 0, nByte, 0); } if( rc!= 0 ){