From b4ade51a84a8cf865e6980d480cacb878a66b0f3 Mon Sep 17 00:00:00 2001 From: Vincent Povirk Date: Wed, 23 Apr 2014 11:25:25 -0500 Subject: [PATCH] ole32: Accept STGM_TRANSACTED with no share mode specified. --- dlls/ole32/storage32.c | 7 +++++++ dlls/ole32/tests/storage32.c | 9 +++------ 2 files changed, 10 insertions(+), 6 deletions(-) diff --git a/dlls/ole32/storage32.c b/dlls/ole32/storage32.c index 72c52f11a3b..a2d00b13c7d 100644 --- a/dlls/ole32/storage32.c +++ b/dlls/ole32/storage32.c @@ -8251,6 +8251,10 @@ static HRESULT validateSTGM(DWORD stgm) case STGM_SHARE_DENY_WRITE: case STGM_SHARE_EXCLUSIVE: break; + case 0: + if (!(stgm & STGM_TRANSACTED)) + return E_FAIL; + break; default: return E_FAIL; } @@ -8306,6 +8310,9 @@ static DWORD GetShareModeFromSTGM(DWORD stgm) { switch (STGM_SHARE_MODE(stgm)) { + case 0: + assert(stgm & STGM_TRANSACTED); + /* fall-through */ case STGM_SHARE_DENY_NONE: return FILE_SHARE_READ | FILE_SHARE_WRITE; case STGM_SHARE_DENY_READ: diff --git a/dlls/ole32/tests/storage32.c b/dlls/ole32/tests/storage32.c index 2cb73ce382d..b5c93aefb2f 100644 --- a/dlls/ole32/tests/storage32.c +++ b/dlls/ole32/tests/storage32.c @@ -3178,9 +3178,9 @@ static const struct lock_test lock_tests[] = { { STGM_CREATE|STGM_WRITE|STGM_SHARE_DENY_WRITE|STGM_TRANSACTED, TRUE, GENERIC_READ|GENERIC_WRITE, FILE_SHARE_READ, wodw_locked_bytes, 0, FALSE }, { STGM_SHARE_EXCLUSIVE|STGM_READWRITE, FALSE, GENERIC_READ|GENERIC_WRITE, FILE_SHARE_READ, rwex_locked_bytes, rwex_fail_ranges, FALSE }, { STGM_SHARE_EXCLUSIVE|STGM_READWRITE|STGM_TRANSACTED, FALSE, GENERIC_READ|GENERIC_WRITE, FILE_SHARE_READ, rwex_locked_bytes, rwex_fail_ranges, FALSE }, - { STGM_READWRITE|STGM_TRANSACTED, FALSE, GENERIC_READ|GENERIC_WRITE, FILE_SHARE_READ|FILE_SHARE_WRITE, rw_locked_bytes, rw_fail_ranges, TRUE }, + { STGM_READWRITE|STGM_TRANSACTED, FALSE, GENERIC_READ|GENERIC_WRITE, FILE_SHARE_READ|FILE_SHARE_WRITE, rw_locked_bytes, rw_fail_ranges, FALSE }, { STGM_READ|STGM_SHARE_DENY_WRITE, FALSE, GENERIC_READ, FILE_SHARE_READ, no_locked_bytes, dw_fail_ranges, TRUE }, - { STGM_READ|STGM_TRANSACTED, FALSE, GENERIC_READ, FILE_SHARE_READ|FILE_SHARE_WRITE, tr_locked_bytes, tr_fail_ranges, TRUE }, + { STGM_READ|STGM_TRANSACTED, FALSE, GENERIC_READ, FILE_SHARE_READ|FILE_SHARE_WRITE, tr_locked_bytes, tr_fail_ranges, FALSE }, { STGM_READ|STGM_SHARE_EXCLUSIVE, FALSE, GENERIC_READ, FILE_SHARE_READ, roex_locked_bytes, roex_fail_ranges, TRUE }, { STGM_READ|STGM_SHARE_EXCLUSIVE|STGM_TRANSACTED, FALSE, GENERIC_READ, FILE_SHARE_READ, roex_locked_bytes, roex_fail_ranges, TRUE }, }; @@ -3280,10 +3280,7 @@ static void test_locking(void) IStorage_Release(stg); hr = StgOpenStorage(filename, NULL, current->stg_mode, NULL, 0, &stg); - if (current->stg_mode == (STGM_READ|STGM_TRANSACTED) || current->stg_mode == (STGM_READWRITE|STGM_TRANSACTED)) - todo_wine ok(SUCCEEDED(hr), "StgOpenStorage with mode %x failed with hr %x\n", current->stg_mode, hr); - else - ok(SUCCEEDED(hr), "StgOpenStorage with mode %x failed with hr %x\n", current->stg_mode, hr); + ok(SUCCEEDED(hr), "StgOpenStorage with mode %x failed with hr %x\n", current->stg_mode, hr); if (FAILED(hr)) { DeleteFileW(filename);