Peter Oberndorfer : shlwapi: Fix IStream::Read for reg/mem stream.

Alexandre Julliard julliard at winehq.org
Tue Sep 29 11:09:05 CDT 2009


Module: wine
Branch: master
Commit: da984870cdc0cb4950feb301943beb15e1e54d54
URL:    http://source.winehq.org/git/wine.git/?a=commit;h=da984870cdc0cb4950feb301943beb15e1e54d54

Author: Peter Oberndorfer <kumbayo84 at arcor.de>
Date:   Mon Sep 28 22:24:07 2009 +0200

shlwapi: Fix IStream::Read for reg/mem stream.

---

 dlls/shlwapi/regstream.c |   25 +++++++++++--------------
 1 files changed, 11 insertions(+), 14 deletions(-)

diff --git a/dlls/shlwapi/regstream.c b/dlls/shlwapi/regstream.c
index ba68bd4..caee2e8 100644
--- a/dlls/shlwapi/regstream.c
+++ b/dlls/shlwapi/regstream.c
@@ -116,24 +116,21 @@ static ULONG WINAPI IStream_fnRelease(IStream *iface)
 static HRESULT WINAPI IStream_fnRead (IStream * iface, void* pv, ULONG cb, ULONG* pcbRead)
 {
 	ISHRegStream *This = (ISHRegStream *)iface;
-
-	DWORD dwBytesToRead, dwBytesLeft;
+	DWORD dwBytesToRead;
 
 	TRACE("(%p)->(%p,0x%08x,%p)\n",This, pv, cb, pcbRead);
 
-	if (!pv)
-	  return STG_E_INVALIDPOINTER;
-
-	dwBytesLeft = This->dwLength - This->dwPos;
-
-	if ( 0 >= dwBytesLeft ) /* end of buffer */
-	  return S_FALSE;
-
-	dwBytesToRead = ( cb > dwBytesLeft) ? dwBytesLeft : cb;
+	if (This->dwPos >= This->dwLength)
+	  dwBytesToRead = 0;
+        else
+	  dwBytesToRead = This->dwLength - This->dwPos;
 
-	memmove ( pv, (This->pbBuffer) + (This->dwPos), dwBytesToRead);
-
-	This->dwPos += dwBytesToRead; /* adjust pointer */
+	dwBytesToRead = (cb > dwBytesToRead) ? dwBytesToRead : cb;
+	if (dwBytesToRead != 0) /* not at end of buffer and we want to read something */
+	{
+	  memmove(pv, This->pbBuffer + This->dwPos, dwBytesToRead);
+	  This->dwPos += dwBytesToRead; /* adjust pointer */
+	}
 
 	if (pcbRead)
 	  *pcbRead = dwBytesToRead;




More information about the wine-cvs mailing list