Module: wine Branch: master Commit: 5132f60298dfaffa44a31cbea6d579c779705067 URL: http://source.winehq.org/git/wine.git/?a=commit;h=5132f60298dfaffa44a31cbea6...
Author: Nikolay Sivov nsivov@codeweavers.com Date: Fri Apr 19 12:37:01 2013 +0400
ole32: Store SMWR storage instance role separately.
---
dlls/ole32/storage32.c | 12 +++++++++--- dlls/ole32/storage32.h | 7 +++++++ 2 files changed, 16 insertions(+), 3 deletions(-)
diff --git a/dlls/ole32/storage32.c b/dlls/ole32/storage32.c index aa82b66..db47423 100644 --- a/dlls/ole32/storage32.c +++ b/dlls/ole32/storage32.c @@ -385,9 +385,8 @@ static HRESULT WINAPI StorageBaseImpl_QueryInterface( { *ppvObject = &This->IPropertySetStorage_iface; } - /* locking interface is report for writer only */ - else if (IsEqualGUID(&IID_IDirectWriterLock, riid) && - (This->openFlags == (STGM_DIRECT_SWMR|STGM_READWRITE|STGM_SHARE_DENY_WRITE))) + /* locking interface is reported for writer only */ + else if (IsEqualGUID(&IID_IDirectWriterLock, riid) && This->lockingrole == SWMR_Writer) { *ppvObject = &This->IDirectWriterLock_iface; } @@ -2785,6 +2784,13 @@ static HRESULT StorageImpl_Construct( This->base.ref = 1; This->base.create = create;
+ if (openFlags == (STGM_DIRECT_SWMR|STGM_READWRITE|STGM_SHARE_DENY_WRITE)) + This->base.lockingrole = SWMR_Writer; + else if (openFlags == (STGM_DIRECT_SWMR|STGM_READ|STGM_SHARE_DENY_NONE)) + This->base.lockingrole = SWMR_Reader; + else + This->base.lockingrole = SWMR_None; + This->base.reverted = 0;
/* diff --git a/dlls/ole32/storage32.h b/dlls/ole32/storage32.h index b037847..8cb330f 100644 --- a/dlls/ole32/storage32.h +++ b/dlls/ole32/storage32.h @@ -163,6 +163,12 @@ HRESULT FileLockBytesImpl_Construct(HANDLE hFile, DWORD openFlags, LPCWSTR pwcsN HRESULT STORAGE_CreateOleStream(IStorage*, DWORD) DECLSPEC_HIDDEN; HRESULT OLECONVERT_CreateCompObjStream(LPSTORAGE pStorage, LPCSTR strOleTypeName) DECLSPEC_HIDDEN;
+enum swmr_mode +{ + SWMR_None, + SWMR_Writer, + SWMR_Reader +};
/**************************************************************************** * StorageBaseImpl definitions. @@ -223,6 +229,7 @@ struct StorageBaseImpl * the transacted snapshot or cache. */ StorageBaseImpl *transactedChild; + enum swmr_mode lockingrole; };
/* virtual methods for StorageBaseImpl objects */