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



Reply via email to