From 6116fc14de8ba74c739ecf98b6979465f8c8674a Mon Sep 17 00:00:00 2001 From: Vincent Povirk Date: Wed, 10 Mar 2010 14:03:12 -0600 Subject: [PATCH 3/8] ole32: Fix the big block offset calculation. Use the actual big block size from the open storage file. Also, remove a special case that was only used for reading/writing the header. --- dlls/ole32/storage32.c | 21 ++++++++------------- 1 files changed, 8 insertions(+), 13 deletions(-) diff --git a/dlls/ole32/storage32.c b/dlls/ole32/storage32.c index 70dcce8..5f78241 100644 --- a/dlls/ole32/storage32.c +++ b/dlls/ole32/storage32.c @@ -269,14 +269,9 @@ static void IEnumSTATSTGImpl_Destroy(IEnumSTATSTGImpl* This); ** Block Functions */ -static ULONG BLOCK_GetBigBlockOffset(ULONG index) +static ULONG StorageImpl_GetBigBlockOffset(StorageImpl* This, ULONG index) { - if (index == 0xffffffff) - index = 0; - else - index ++; - - return index * BIG_BLOCK_SIZE; + return (index+1) * This->bigBlockSize; } /************************************************************************ @@ -3722,7 +3717,7 @@ static BOOL StorageImpl_ReadBigBlock( DWORD read; ulOffset.u.HighPart = 0; - ulOffset.u.LowPart = BLOCK_GetBigBlockOffset(blockIndex); + ulOffset.u.LowPart = StorageImpl_GetBigBlockOffset(This, blockIndex); StorageImpl_ReadAt(This, ulOffset, buffer, This->bigBlockSize, &read); return (read == This->bigBlockSize); @@ -3739,7 +3734,7 @@ static BOOL StorageImpl_ReadDWordFromBigBlock( DWORD tmp; ulOffset.u.HighPart = 0; - ulOffset.u.LowPart = BLOCK_GetBigBlockOffset(blockIndex); + ulOffset.u.LowPart = StorageImpl_GetBigBlockOffset(This, blockIndex); ulOffset.u.LowPart += offset; StorageImpl_ReadAt(This, ulOffset, &tmp, sizeof(DWORD), &read); @@ -3756,7 +3751,7 @@ static BOOL StorageImpl_WriteBigBlock( DWORD wrote; ulOffset.u.HighPart = 0; - ulOffset.u.LowPart = BLOCK_GetBigBlockOffset(blockIndex); + ulOffset.u.LowPart = StorageImpl_GetBigBlockOffset(This, blockIndex); StorageImpl_WriteAt(This, ulOffset, buffer, This->bigBlockSize, &wrote); return (wrote == This->bigBlockSize); @@ -3772,7 +3767,7 @@ static BOOL StorageImpl_WriteDWordToBigBlock( DWORD wrote; ulOffset.u.HighPart = 0; - ulOffset.u.LowPart = BLOCK_GetBigBlockOffset(blockIndex); + ulOffset.u.LowPart = StorageImpl_GetBigBlockOffset(This, blockIndex); ulOffset.u.LowPart += offset; value = htole32(value); @@ -5162,7 +5157,7 @@ HRESULT BlockChainStream_ReadAt(BlockChainStream* This, TRACE("block %i\n",blockIndex); ulOffset.u.HighPart = 0; - ulOffset.u.LowPart = BLOCK_GetBigBlockOffset(blockIndex) + + ulOffset.u.LowPart = StorageImpl_GetBigBlockOffset(This->parentStorage, blockIndex) + offsetInBlock; StorageImpl_ReadAt(This->parentStorage, @@ -5258,7 +5253,7 @@ HRESULT BlockChainStream_WriteAt(BlockChainStream* This, TRACE("block %i\n",blockIndex); ulOffset.u.HighPart = 0; - ulOffset.u.LowPart = BLOCK_GetBigBlockOffset(blockIndex) + + ulOffset.u.LowPart = StorageImpl_GetBigBlockOffset(This->parentStorage, blockIndex) + offsetInBlock; StorageImpl_WriteAt(This->parentStorage, -- 1.6.3.3