Mike McCormack : ole32: More tests and fixes for STGM_PRIORITY.

Alexandre Julliard julliard at wine.codeweavers.com
Tue Apr 18 05:13:35 CDT 2006


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

Author: Mike McCormack <mike at codeweavers.com>
Date:   Tue Apr 18 17:18:51 2006 +0900

ole32: More tests and fixes for STGM_PRIORITY.

---

 dlls/ole32/storage32.c       |    8 +++++++-
 dlls/ole32/tests/storage32.c |   23 +++++++++++++++++++++++
 2 files changed, 30 insertions(+), 1 deletions(-)

diff --git a/dlls/ole32/storage32.c b/dlls/ole32/storage32.c
index ef6b248..5e6696c 100644
--- a/dlls/ole32/storage32.c
+++ b/dlls/ole32/storage32.c
@@ -5911,8 +5911,14 @@ HRESULT WINAPI StgOpenStorage(
   /* STGM_PRIORITY implies exclusive access */
   if (grfMode & STGM_PRIORITY)
   {
+    if (grfMode & (STGM_TRANSACTED|STGM_SIMPLE|STGM_NOSCRATCH|STGM_NOSNAPSHOT))
+      return STG_E_INVALIDFLAG;
+    if (grfMode & STGM_DELETEONRELEASE)
+      return STG_E_INVALIDFUNCTION;
+    if(STGM_ACCESS_MODE(grfMode) != STGM_READ)
+      return STG_E_INVALIDFLAG;
     grfMode &= ~0xf0; /* remove the existing sharing mode */
-    grfMode |= STGM_SHARE_EXCLUSIVE;
+    grfMode |= STGM_SHARE_DENY_WRITE;
   }
 
   /*
diff --git a/dlls/ole32/tests/storage32.c b/dlls/ole32/tests/storage32.c
index d9668a5..e1f40f2 100644
--- a/dlls/ole32/tests/storage32.c
+++ b/dlls/ole32/tests/storage32.c
@@ -478,9 +478,32 @@ static void test_open_storage(void)
     stg = NULL;
     r = StgOpenStorage( filename, NULL, STGM_PRIORITY, NULL, 0, &stg);
     ok(r == S_OK, "should succeed\n");
+    r = StgOpenStorage( filename, NULL, STGM_PRIORITY, NULL, 0, &stg2);
+    ok(r == S_OK, "should succeed\n");
+    if (stg2)
+        IStorage_Release(stg2);
     if (stg)
         IStorage_Release(stg);
 
+    stg = NULL;
+    r = StgOpenStorage( filename, NULL, STGM_PRIORITY | STGM_READWRITE, NULL, 0, &stg);
+    ok(r == STG_E_INVALIDFLAG, "should fail\n");
+
+    r = StgOpenStorage( filename, NULL, STGM_TRANSACTED | STGM_PRIORITY, NULL, 0, &stg);
+    ok(r == STG_E_INVALIDFLAG, "should fail\n");
+
+    r = StgOpenStorage( filename, NULL, STGM_SIMPLE | STGM_PRIORITY, NULL, 0, &stg);
+    ok(r == STG_E_INVALIDFLAG, "should fail\n");
+
+    r = StgOpenStorage( filename, NULL, STGM_DELETEONRELEASE | STGM_PRIORITY, NULL, 0, &stg);
+    ok(r == STG_E_INVALIDFUNCTION, "should fail\n");
+
+    r = StgOpenStorage( filename, NULL, STGM_NOSCRATCH | STGM_PRIORITY, NULL, 0, &stg);
+    ok(r == STG_E_INVALIDFLAG, "should fail\n");
+
+    r = StgOpenStorage( filename, NULL, STGM_NOSNAPSHOT | STGM_PRIORITY, NULL, 0, &stg);
+    ok(r == STG_E_INVALIDFLAG, "should fail\n");
+
     r = DeleteFileW(filename);
     ok(r, "file didn't exist\n");
 }




More information about the wine-cvs mailing list