Mike McCormack : ole32: Fix StgOpenStorage' s handling of the STGM_PRIORITY flag.

Alexandre Julliard julliard at wine.codeweavers.com
Thu Mar 30 05:44:01 CST 2006


Module: wine
Branch: refs/heads/master
Commit: 50436da519531d3a6981ec22c22958a1f21fc1b7
URL:    http://source.winehq.org/git/?p=wine.git;a=commit;h=50436da519531d3a6981ec22c22958a1f21fc1b7

Author: Mike McCormack <mike at codeweavers.com>
Date:   Wed Mar 29 17:09:25 2006 +0900

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 deletions(-)

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 @@ 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 4ac4144..7ed9655 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");
 }




More information about the wine-cvs mailing list