]> git.ipfire.org Git - thirdparty/sqlite.git/commitdiff
Import all the latest trunk changes into the WinRT branch. Refactor and/or remove...
authormistachkin <mistachkin@noemail.net>
Wed, 18 Apr 2012 05:57:38 +0000 (05:57 +0000)
committermistachkin <mistachkin@noemail.net>
Wed, 18 Apr 2012 05:57:38 +0000 (05:57 +0000)
FossilOrigin-Name: ad5cd15f49b286896f94ab1ff207077beee40e12

1  2 
manifest
manifest.uuid
src/os_win.c
src/sqlite.h.in
src/test1.c
src/test_config.c
test/quota2.test

diff --cc manifest
index 9e04060a3317eb4e2204f6ca4d92e99309e6738a,75fe99adec7ca7ddbbf46919e42f422c6aabdbda..3361895e4ae5ed4580d0948745c9fb4dc734fbc8
+++ 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 13c7678f8f6667dcab0bde2c60b52cfeda438679,59d3d01d7789bb6b3baff951df9941f1c15b8b0e..52453a246bfd99f448b5339cf9e27cfa6b346a01
@@@ -1,1 -1,1 +1,1 @@@
- 300bcfe31102d4428567d56810b57d1d54c1d43b
 -430bb59d798286a86c351de92c429345f016b3f0
++ad5cd15f49b286896f94ab1ff207077beee40e12
diff --cc src/os_win.c
index 45fae46daa5255201cdecfb27d907c32829b454a,358b70c12859a22a895e472fba6453e5b5f78f59..dfa62a7f4cd0fc1cac3cdaed63e6f3e4f4919ff1
@@@ -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 */
    { "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,
  ** 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
@@@ -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.
    */
    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
@@@ -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 */
      }
    }
    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 ){
diff --cc src/sqlite.h.in
Simple merge
diff --cc src/test1.c
Simple merge
Simple merge
Simple merge