I don't think this should fail if size equals 0. This function is also used by StgStreamImpl_Read and it shouldn't fail if it reads 0 bytes.
I think a better place to fix it is in the SmallBlocksToBigBlocks() loop.
/Ulrich
On Mon, Dec 26, 2005 at 09:26:58AM -0500, Howard Selover III wrote:
ChangeLog: Howard Selover III selover@speakeasy.net Added back the end of read detection to eliminate a spin condition.
Index: dlls/ole32/storage32.c
RCS file: /home/wine/wine/dlls/ole32/storage32.c,v retrieving revision 1.97 diff -u -p -r1.97 storage32.c --- dlls/ole32/storage32.c 22 Dec 2005 17:12:52 -0000 1.97 +++ dlls/ole32/storage32.c 26 Dec 2005 01:47:44 -0000 @@ -5188,6 +5188,9 @@ HRESULT SmallBlockChainStream_ReadAt( offsetInBlock = 0; /* There is no offset on the next block */ }
- if (size == 0)
- rc = E_FAIL;
- return rc;
}
Hello Ulrich,
I debated where to place the fix since this is not a public documented function. At least I could not find documentation for the function. I decided to go with the location and type of return previously presented by the function. If the author/maintainer desires the other approach and would like a tested patch, I would be happy to do it.
Howard
Ulrich Czekalla wrote:
I don't think this should fail if size equals 0. This function is also used by StgStreamImpl_Read and it shouldn't fail if it reads 0 bytes.
I think a better place to fix it is in the SmallBlocksToBigBlocks() loop.
/Ulrich
On Mon, Dec 26, 2005 at 09:26:58AM -0500, Howard Selover III wrote:
ChangeLog: Howard Selover III selover@speakeasy.net Added back the end of read detection to eliminate a spin condition.
Index: dlls/ole32/storage32.c
RCS file: /home/wine/wine/dlls/ole32/storage32.c,v retrieving revision 1.97 diff -u -p -r1.97 storage32.c --- dlls/ole32/storage32.c 22 Dec 2005 17:12:52 -0000 1.97 +++ dlls/ole32/storage32.c 26 Dec 2005 01:47:44 -0000 @@ -5188,6 +5188,9 @@ HRESULT SmallBlockChainStream_ReadAt( offsetInBlock = 0; /* There is no offset on the next block */ }
- if (size == 0)
- rc = E_FAIL;
return rc; }