From: Dmitry Timoshkov dmitry@baikal.ru
Signed-off-by: Dmitry Timoshkov dmitry@baikal.ru --- dlls/ole32/tests/storage32.c | 21 ++++++++++++++++++++- 1 file changed, 20 insertions(+), 1 deletion(-)
diff --git a/dlls/ole32/tests/storage32.c b/dlls/ole32/tests/storage32.c index 1780203fe12..2d04cf2b759 100644 --- a/dlls/ole32/tests/storage32.c +++ b/dlls/ole32/tests/storage32.c @@ -894,6 +894,8 @@ static void test_storage_suminfo(void) IStorage *stg = NULL; IPropertySetStorage *propset = NULL; IPropertyStorage *ps = NULL; + IStream *stm; + WCHAR name[CCH_MAX_PROPSTG_NAME + 1]; HRESULT r;
DeleteFileA(filenameA); @@ -949,12 +951,29 @@ static void test_storage_suminfo(void) IPropertyStorage_Release(ps);
/* should be able to open it */ - r = IPropertySetStorage_Open( propset, &FMTID_SummaryInformation, + r = IPropertySetStorage_Open( propset, &FMTID_SummaryInformation, STGM_READWRITE|STGM_SHARE_EXCLUSIVE, &ps); ok(r == S_OK, "open failed\n"); if(r == S_OK) IPropertyStorage_Release(ps);
+ r = IPropertySetStorage_Open(propset, &FMTID_SummaryInformation, + STGM_READWRITE|STGM_SHARE_EXCLUSIVE|STGM_TRANSACTED, &ps); + todo_wine + ok(r == S_OK, "Open failed: 0x%08lx\n", r); + if (r == S_OK) + IPropertyStorage_Release(ps); + + r = FmtIdToPropStgName(&FMTID_SummaryInformation, name); + ok(r == S_OK, "FmtIdToPropStgName failed: 0x%08lx\n", r); + + r = IStorage_OpenStream(stg, name, NULL, STGM_READWRITE|STGM_SHARE_EXCLUSIVE, 0, &stm); + ok(r == S_OK, "OpenStream failed: 0x%08lx\n", r); + IStream_Release(stm); + + r = IStorage_OpenStream(stg, name, NULL, STGM_READWRITE|STGM_SHARE_EXCLUSIVE|STGM_TRANSACTED, 0, &stm); + ok(r == STG_E_INVALIDFUNCTION, "OpenStream should fail: 0x%08lx\n", r); + /* delete it */ r = IPropertySetStorage_Delete( propset, &FMTID_SummaryInformation ); ok(r == S_OK, "failed to delete property set storage\n");
From: Dmitry Timoshkov dmitry@baikal.ru
Signed-off-by: Dmitry Timoshkov dmitry@baikal.ru --- dlls/ole32/stg_prop.c | 2 ++ dlls/ole32/tests/storage32.c | 2 -- 2 files changed, 2 insertions(+), 2 deletions(-)
diff --git a/dlls/ole32/stg_prop.c b/dlls/ole32/stg_prop.c index 547d1f82335..04dda206d72 100644 --- a/dlls/ole32/stg_prop.c +++ b/dlls/ole32/stg_prop.c @@ -3009,6 +3009,8 @@ static HRESULT WINAPI IPropertySetStorage_fnOpen(
TRACE("%p, %s, %#lx, %p.\n", This, debugstr_guid(rfmtid), grfMode, ppprstg);
+ grfMode &= ~STGM_TRANSACTED; + /* be picky */ if (grfMode != (STGM_READWRITE|STGM_SHARE_EXCLUSIVE) && grfMode != (STGM_READ|STGM_SHARE_EXCLUSIVE)) diff --git a/dlls/ole32/tests/storage32.c b/dlls/ole32/tests/storage32.c index 2d04cf2b759..cb77b025293 100644 --- a/dlls/ole32/tests/storage32.c +++ b/dlls/ole32/tests/storage32.c @@ -959,9 +959,7 @@ static void test_storage_suminfo(void)
r = IPropertySetStorage_Open(propset, &FMTID_SummaryInformation, STGM_READWRITE|STGM_SHARE_EXCLUSIVE|STGM_TRANSACTED, &ps); - todo_wine ok(r == S_OK, "Open failed: 0x%08lx\n", r); - if (r == S_OK) IPropertyStorage_Release(ps);
r = FmtIdToPropStgName(&FMTID_SummaryInformation, name);
From: Dmitry Timoshkov dmitry@baikal.ru
Signed-off-by: Dmitry Timoshkov dmitry@baikal.ru --- dlls/ole32/stg_prop.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/dlls/ole32/stg_prop.c b/dlls/ole32/stg_prop.c index 04dda206d72..9b11b2085db 100644 --- a/dlls/ole32/stg_prop.c +++ b/dlls/ole32/stg_prop.c @@ -1815,7 +1815,7 @@ static HRESULT PropertyStorage_ReadDictionary(PropertyStorage_impl *This, const }
TRACE("Reading entry with ID %#lx, %ld chars, name %s.\n", propid, cbEntry, This->codePage == CP_UNICODE ? - debugstr_wn((WCHAR *)buffer->data, cbEntry) : debugstr_an((char *)buffer->data, cbEntry)); + debugstr_wn((WCHAR *)(buffer->data + offset), cbEntry) : debugstr_an((char *)buffer->data + offset, cbEntry));
hr = PropertyStorage_StoreNameWithId(This, (char *)buffer->data + offset, This->codePage, propid); /* Unicode entries are padded to DWORD boundaries */
From: Dmitry Timoshkov dmitry@baikal.ru
Signed-off-by: Dmitry Timoshkov dmitry@baikal.ru --- dlls/ole32/stg_prop.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/dlls/ole32/stg_prop.c b/dlls/ole32/stg_prop.c index 9b11b2085db..2ac9eec11f5 100644 --- a/dlls/ole32/stg_prop.c +++ b/dlls/ole32/stg_prop.c @@ -2114,9 +2114,9 @@ static BOOL PropertyStorage_DictionaryWriter(const void *key, c->bytesWritten += keyLen;
/* Align to 4 bytes. */ - pad_len = sizeof(DWORD) - keyLen % sizeof(DWORD); - if (pad_len) + if (keyLen & 3) { + pad_len = sizeof(DWORD) - (keyLen & 3); c->hr = IStream_Write(This->stm, &pad, pad_len, &count); if (FAILED(c->hr)) goto end;
From: Dmitry Timoshkov dmitry@baikal.ru
Signed-off-by: Dmitry Timoshkov dmitry@baikal.ru --- dlls/ole32/stg_prop.c | 3 +++ 1 file changed, 3 insertions(+)
diff --git a/dlls/ole32/stg_prop.c b/dlls/ole32/stg_prop.c index 2ac9eec11f5..ea7aa0824ff 100644 --- a/dlls/ole32/stg_prop.c +++ b/dlls/ole32/stg_prop.c @@ -1063,7 +1063,10 @@ static HRESULT WINAPI IPropertyStorage_fnCommit( return STG_E_ACCESSDENIED; EnterCriticalSection(&This->cs); if (This->dirty) + { hr = PropertyStorage_WriteToStream(This); + if (hr == S_OK) This->dirty = FALSE; + } else hr = S_OK; LeaveCriticalSection(&This->cs);
This merge request was approved by Esme Povirk.