]> git.ipfire.org Git - thirdparty/sqlite.git/commitdiff
Avoid using the OVERLAPPED struct on WinCE.
authormistachkin <mistachkin@noemail.net>
Fri, 30 Mar 2012 16:44:33 +0000 (16:44 +0000)
committermistachkin <mistachkin@noemail.net>
Fri, 30 Mar 2012 16:44:33 +0000 (16:44 +0000)
FossilOrigin-Name: 196ca3a8b007b9f792e969893d981f6c5aa2fccc

manifest
manifest.uuid
src/os_win.c

index 47f54b8cc9016b57b13eca9a5d97a4f21f04ecc6..17608576f189c8aaadc6b9e26f70d5969b99f277 100644 (file)
--- a/manifest
+++ b/manifest
@@ -1,5 +1,5 @@
-C Simplify\sthe\swinRead\sand\swinWrite\sVFS\sfunctions\sto\sreduce\sthe\snumber\nof\ssystem\scalls.
-D 2012-03-30T15:57:45.451
+C Avoid\susing\sthe\sOVERLAPPED\sstruct\son\sWinCE.
+D 2012-03-30T16:44:33.303
 F Makefile.arm-wince-mingw32ce-gcc d6df77f1f48d690bd73162294bbba7f59507c72f
 F Makefile.in 2f37e468503dbe79d35c9f6dffcf3fae1ae9ec20
 F Makefile.linux-gcc 91d710bdc4998cb015f39edf3cb314ec4f4d7e23
@@ -168,7 +168,7 @@ F src/os.h 59beba555b65a450bd1d804220532971d4299f60
 F src/os_common.h 92815ed65f805560b66166e3583470ff94478f04
 F src/os_os2.c 4a75888ba3dfc820ad5e8177025972d74d7f2440
 F src/os_unix.c 0e3d2942d228d0366fb80a3640f35caf413b66d1
-F src/os_win.c c7b26b78c5e62de7355ad79e0ce79d7b0f5fccc4
+F src/os_win.c 5e9e933a412ab35de2a6506b3c6a8295b31b309e
 F src/pager.c 85988507fa20acc60defb834722eddf4633e4aeb
 F src/pager.h ef1eaf8593e78f73885c1dfac27ad83bee23bdc5
 F src/parse.y eb054bb40a5bf90d3422a01ed0e5df229461727a
@@ -999,7 +999,7 @@ F tool/tostr.awk e75472c2f98dd76e06b8c9c1367f4ab07e122d06
 F tool/vdbe-compress.tcl d70ea6d8a19e3571d7ab8c9b75cba86d1173ff0f
 F tool/warnings-clang.sh 9f406d66e750e8ac031c63a9ef3248aaa347ef2a
 F tool/warnings.sh fbc018d67fd7395f440c28f33ef0f94420226381
-P 1b75f301affac654bee24fa247046ea0782d3c4d
-R 2cc6bffd476fbc89b05bef18789bd072
-U drh
-Z 6ac97e4f60396b50617248087122bd36
+P b34491869c4fb31d2fdd14c94a7db2e1c0e572ba
+R 7c7c91e4f03aba786b8f3e6627280744
+U mistachkin
+Z 7d31e5badb9fd33ec4e58af382112a75
index 8107006afc8ccb8eda6ed331596b2b2015212712..aa0af4ede5bd6d6017564108db89a7a9346f9f77 100644 (file)
@@ -1 +1 @@
-b34491869c4fb31d2fdd14c94a7db2e1c0e572ba
\ No newline at end of file
+196ca3a8b007b9f792e969893d981f6c5aa2fccc
\ No newline at end of file
index 5826be688f315bc0c56f1ea033ea140dc77aa9b6..358b70c12859a22a895e472fba6453e5b5f78f59 100644 (file)
@@ -1636,7 +1636,9 @@ static int winRead(
   int amt,                   /* Number of bytes to read */
   sqlite3_int64 offset       /* Begin reading at this offset */
 ){
+#if !SQLITE_OS_WINCE
   OVERLAPPED overlapped;          /* The offset for ReadFile. */
+#endif
   winFile *pFile = (winFile*)id;  /* file handle */
   DWORD nRead;                    /* Number of bytes actually read from file */
   int nRetry = 0;                 /* Number of retrys */
@@ -1645,11 +1647,18 @@ static int winRead(
   SimulateIOError(return SQLITE_IOERR_READ);
   OSTRACE(("READ %d lock=%d\n", pFile->h, pFile->locktype));
 
+#if SQLITE_OS_WINCE
+  if( seekWinFile(pFile, offset) ){
+    return SQLITE_FULL;
+  }
+  while( !osReadFile(pFile->h, pBuf, amt, &nRead, 0) ){
+#else
   memset(&overlapped, 0, sizeof(OVERLAPPED));
   overlapped.Offset = (LONG)(offset & 0xffffffff);
   overlapped.OffsetHigh = (LONG)((offset>>32) & 0x7fffffff);
   while( !osReadFile(pFile->h, pBuf, amt, &nRead, &overlapped) &&
          osGetLastError()!=ERROR_HANDLE_EOF ){
+#endif
     DWORD lastErrno;
     if( retryIoerr(&nRetry, &lastErrno) ) continue;
     pFile->lastErrno = lastErrno;
@@ -1687,19 +1696,32 @@ static int winWrite(
 
   OSTRACE(("WRITE %d lock=%d\n", pFile->h, pFile->locktype));
 
+#if SQLITE_OS_WINCE
+  rc = seekWinFile(pFile, offset);
+  if( rc==0 ){
+#else
   {
+#endif
+#if !SQLITE_OS_WINCE
     OVERLAPPED overlapped;        /* The offset for WriteFile. */
+#endif
     u8 *aRem = (u8 *)pBuf;        /* Data yet to be written */
     int nRem = amt;               /* Number of bytes yet to be written */
     DWORD nWrite;                 /* Bytes written by each WriteFile() call */
     DWORD lastErrno = NO_ERROR;   /* Value returned by GetLastError() */
 
+#if !SQLITE_OS_WINCE
     memset(&overlapped, 0, sizeof(OVERLAPPED));
     overlapped.Offset = (LONG)(offset & 0xffffffff);
     overlapped.OffsetHigh = (LONG)((offset>>32) & 0x7fffffff);
+#endif
 
     while( nRem>0 ){
+#if SQLITE_OS_WINCE
+      if( !osWriteFile(pFile->h, aRem, nRem, &nWrite, 0) ){
+#else
       if( !osWriteFile(pFile->h, aRem, nRem, &nWrite, &overlapped) ){
+#endif
         if( retryIoerr(&nRetry, &lastErrno) ) continue;
         break;
       }
@@ -1707,9 +1729,11 @@ static int winWrite(
         lastErrno = osGetLastError();
         break;
       }
+#if !SQLITE_OS_WINCE
       offset += nWrite;
       overlapped.Offset = (LONG)(offset & 0xffffffff);
       overlapped.OffsetHigh = (LONG)((offset>>32) & 0x7fffffff);
+#endif
       aRem += nWrite;
       nRem -= nWrite;
     }