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. -- Rob Shearman