Peter Oberndorfer : shlwapi: Fix IStream::Read for reg/mem stream.
Module: wine Branch: master Commit: da984870cdc0cb4950feb301943beb15e1e54d54 URL: http://source.winehq.org/git/wine.git/?a=commit;h=da984870cdc0cb4950feb30194... Author: Peter Oberndorfer <kumbayo84(a)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;
participants (1)
-
Alexandre Julliard