OLEAUT32: Use the FAILED macro to check for failure of interface methods.

Robert Shearman rob at codeweavers.com
Fri Dec 30 06:00:49 CST 2005


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




More information about the wine-devel mailing list