diff --git a/dlls/ole32/storage32.c b/dlls/ole32/storage32.c index 64039ccd913..4ff9f89e1bb 100644 --- a/dlls/ole32/storage32.c +++ b/dlls/ole32/storage32.c @@ -3045,6 +3045,32 @@ static void StorageImpl_SaveFileHeader( StorageImpl_WriteBigBlock(This, -1, headerBigBlock); } +/****************************************************************************** + * StorageImpl_ReadRawDirEntry + * + * This method will read the raw data from a directory entry in the file. + * + * buffer must be PROPSET_BLOCK_SIZE bytes long. + */ +HRESULT StorageImpl_ReadRawDirEntry(StorageImpl *This, ULONG index, BYTE *buffer) +{ + ULARGE_INTEGER offset; + HRESULT hr; + ULONG bytesRead; + + offset.u.HighPart = 0; + offset.u.LowPart = index * PROPSET_BLOCK_SIZE; + + hr = BlockChainStream_ReadAt( + This->rootBlockChain, + offset, + PROPSET_BLOCK_SIZE, + buffer, + &bytesRead); + + return hr; +} + /****************************************************************************** * Storage32Impl_ReadProperty * @@ -3056,19 +3082,9 @@ BOOL StorageImpl_ReadProperty( StgProperty* buffer) { BYTE currentProperty[PROPSET_BLOCK_SIZE]; - ULARGE_INTEGER offsetInPropSet; HRESULT readRes; - ULONG bytesRead; - offsetInPropSet.u.HighPart = 0; - offsetInPropSet.u.LowPart = index * PROPSET_BLOCK_SIZE; - - readRes = BlockChainStream_ReadAt( - This->rootBlockChain, - offsetInPropSet, - PROPSET_BLOCK_SIZE, - currentProperty, - &bytesRead); + readRes = StorageImpl_ReadRawDirEntry(This, index, currentProperty); if (SUCCEEDED(readRes)) { diff --git a/dlls/ole32/storage32.h b/dlls/ole32/storage32.h index 8dd44fad08e..281948efa9f 100644 --- a/dlls/ole32/storage32.h +++ b/dlls/ole32/storage32.h @@ -290,6 +290,11 @@ struct StorageImpl BigBlockFile* bigBlockFile; }; +HRESULT StorageImpl_ReadRawDirEntry( + StorageImpl *This, + ULONG index, + BYTE *buffer); + BOOL StorageImpl_ReadProperty( StorageImpl* This, ULONG index,