Mike McCormack wrote:
} hr=IStream_Read(pStm,header,8,&xread);
- if (hr || xread!=8) {
- if (FAILED(hr) || xread!=8) { FIXME("Failure while reading picture header (hr is %lx, nread is %ld).\n",hr,xread); return hr; }
@@ -1128,10 +1128,10 @@ static HRESULT WINAPI OLEPictureImpl_Loa while (xread < origsize) { hr = IStream_Read(pStm,xbuf+xread,origsize-xread,&nread); xread+=nread;
if (hr || !nread)
if (FAILED(hr) || !nread) break; }
if (!nread || hr) /* done, or error */
if (!nread || FAILED(hr)) /* done, or error */ break; if (xread == origsize) { origsize += sizeinc;
@@ -1139,7 +1139,7 @@ static HRESULT WINAPI OLEPictureImpl_Loa xbuf = HeapReAlloc (GetProcessHeap(), HEAP_ZERO_MEMORY, xbuf, origsize); } }
if (hr)
if (FAILED(hr)) TRACE("hr in no-stat loader case is %08lx\n", hr); TRACE("loaded %ld bytes.\n", xread); This->datalen = xread;
@@ -1155,7 +1155,7 @@ static HRESULT WINAPI OLEPictureImpl_Loa ULONG nread; hr = IStream_Read(pStm,xbuf+xread,This->datalen-xread,&nread); xread+=nread;
if (hr || !nread)
if (FAILED(hr) || !nread) break; } if (xread != This->datalen)
These changes are wrong. IStream_Read can return S_FALSE, which means that the call was successful, but didn't do what was intended. From MSDN:
S_FALSE The data cannot be read from the stream object. Depending on the implementation, either S_FALSE or an error code could be returned when reading past the end of the stream.