Hans Leidekker : msi: Clone an open stream if possible in cabinet_open_stream.

Alexandre Julliard julliard at winehq.org
Fri May 6 13:44:15 CDT 2011


Module: wine
Branch: master
Commit: 3f7312fdc1aeec1cac782706ca4a0225fa39e9b4
URL:    http://source.winehq.org/git/wine.git/?a=commit;h=3f7312fdc1aeec1cac782706ca4a0225fa39e9b4

Author: Hans Leidekker <hans at codeweavers.com>
Date:   Fri May  6 14:41:14 2011 +0200

msi: Clone an open stream if possible in cabinet_open_stream.

---

 dlls/msi/media.c |   14 +++++++++-----
 1 files changed, 9 insertions(+), 5 deletions(-)

diff --git a/dlls/msi/media.c b/dlls/msi/media.c
index bf0522a..608e84c 100644
--- a/dlls/msi/media.c
+++ b/dlls/msi/media.c
@@ -235,13 +235,17 @@ static INT_PTR CDECL cabinet_open_stream( char *pszFile, int oflag, int pmode )
         WARN("failed to encode stream name\n");
         return 0;
     }
-    hr = IStorage_OpenStream( cab->storage, encoded, NULL, STGM_READ|STGM_SHARE_EXCLUSIVE, 0, &stream );
-    msi_free( encoded );
-    if (FAILED(hr))
+    if (msi_clone_open_stream( package_disk.package->db, cab->storage, encoded, &stream ) != ERROR_SUCCESS)
     {
-        WARN("failed to open stream 0x%08x\n", hr);
-        return 0;
+        hr = IStorage_OpenStream( cab->storage, encoded, NULL, STGM_READ|STGM_SHARE_EXCLUSIVE, 0, &stream );
+        msi_free( encoded );
+        if (FAILED(hr))
+        {
+            WARN("failed to open stream 0x%08x\n", hr);
+            return 0;
+        }
     }
+    msi_free( encoded );
     return (INT_PTR)stream;
 }
 




More information about the wine-cvs mailing list