From 50436da519531d3a6981ec22c22958a1f21fc1b7 Mon Sep 17 00:00:00 2001 From: Mike McCormack Date: Wed, 29 Mar 2006 17:09:25 +0900 Subject: [PATCH] ole32: Fix StgOpenStorage's handling of the STGM_PRIORITY flag. --- dlls/ole32/storage32.c | 2 +- dlls/ole32/tests/storage32.c | 26 ++++++++++++++++++++++++++ 2 files changed, 27 insertions(+), 1 deletion(-) diff --git a/dlls/ole32/storage32.c b/dlls/ole32/storage32.c index 215413e27e9..bbb2d3cde7a 100644 --- a/dlls/ole32/storage32.c +++ b/dlls/ole32/storage32.c @@ -5911,7 +5911,7 @@ HRESULT WINAPI StgOpenStorage( /* * Validate the sharing mode */ - if (!(grfMode & STGM_TRANSACTED)) + if (!(grfMode & (STGM_TRANSACTED|STGM_PRIORITY))) switch(STGM_SHARE_MODE(grfMode)) { case STGM_SHARE_EXCLUSIVE: diff --git a/dlls/ole32/tests/storage32.c b/dlls/ole32/tests/storage32.c index 4ac41442459..7ed965594cd 100644 --- a/dlls/ole32/tests/storage32.c +++ b/dlls/ole32/tests/storage32.c @@ -448,6 +448,32 @@ static void test_open_storage(void) ok(r == 0, "wrong ref count\n"); } + /* open like visio 2003 */ + stg = NULL; + r = StgOpenStorage( filename, NULL, STGM_PRIORITY | STGM_SHARE_DENY_NONE, NULL, 0, &stg); + ok(r == S_OK, "should succeed\n"); + if (stg) + IStorage_Release(stg); + + /* test other sharing modes with STGM_PRIORITY */ + stg = NULL; + r = StgOpenStorage( filename, NULL, STGM_PRIORITY | STGM_SHARE_EXCLUSIVE, NULL, 0, &stg); + ok(r == S_OK, "should succeed\n"); + if (stg) + IStorage_Release(stg); + + stg = NULL; + r = StgOpenStorage( filename, NULL, STGM_PRIORITY | STGM_SHARE_DENY_WRITE, NULL, 0, &stg); + ok(r == S_OK, "should succeed\n"); + if (stg) + IStorage_Release(stg); + + stg = NULL; + r = StgOpenStorage( filename, NULL, STGM_PRIORITY | STGM_SHARE_DENY_READ, NULL, 0, &stg); + ok(r == S_OK, "should succeed\n"); + if (stg) + IStorage_Release(stg); + r = DeleteFileW(filename); ok(r, "file didn't exist\n"); }