From: mistachkin Date: Fri, 30 Mar 2012 16:44:33 +0000 (+0000) Subject: Avoid using the OVERLAPPED struct on WinCE. X-Git-Tag: mountain-lion~3^2~1 X-Git-Url: http://git.ipfire.org/gitweb/gitweb.cgi?a=commitdiff_plain;h=00fa55d7da3ff31b5c354884b8e507f50339b756;p=thirdparty%2Fsqlite.git Avoid using the OVERLAPPED struct on WinCE. FossilOrigin-Name: 196ca3a8b007b9f792e969893d981f6c5aa2fccc --- diff --git a/manifest b/manifest index 47f54b8cc9..17608576f1 100644 --- 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 diff --git a/manifest.uuid b/manifest.uuid index 8107006afc..aa0af4ede5 100644 --- a/manifest.uuid +++ b/manifest.uuid @@ -1 +1 @@ -b34491869c4fb31d2fdd14c94a7db2e1c0e572ba \ No newline at end of file +196ca3a8b007b9f792e969893d981f6c5aa2fccc \ No newline at end of file diff --git a/src/os_win.c b/src/os_win.c index 5826be688f..358b70c128 100644 --- a/src/os_win.c +++ b/src/os_win.c @@ -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; }