- 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
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
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
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
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
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
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
# 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 */
{ "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 */
** An implementation of the LockFile() API of Windows for CE
*/
static BOOL winceLockFile(
-- HANDLE *phFile,
++ LPHANDLE phFile,
DWORD dwFileOffsetLow,
DWORD dwFileOffsetHigh,
DWORD nNumberOfBytesToLockLow,
** An implementation of the UnlockFile API of Windows for CE
*/
static BOOL winceUnlockFile(
-- HANDLE *phFile,
++ LPHANDLE phFile,
DWORD dwFileOffsetLow,
DWORD dwFileOffsetHigh,
DWORD nNumberOfBytesToUnlockLow,
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
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 */
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,
&& (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.
*/
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{
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{
** 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
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));
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 */
}
}
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;
/* 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 ){