ole32: Fix StgOpenStorage's handling of the STGM_PRIORITY flag.
diff --git a/dlls/ole32/storage32.c b/dlls/ole32/storage32.c
index 215413e..bbb2d3c 100644
--- a/dlls/ole32/storage32.c
+++ b/dlls/ole32/storage32.c
@@ -5911,7 +5911,7 @@
/*
* 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 4ac4144..7ed9655 100644
--- a/dlls/ole32/tests/storage32.c
+++ b/dlls/ole32/tests/storage32.c
@@ -448,6 +448,32 @@
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");
}