[7/7] msi: Clone an open stream if possible in cabinet_open_stream.

Hans Leidekker hans at codeweavers.com
Fri May 6 07:41:14 CDT 2011


Fixes http://bugs.winehq.org/show_bug.cgi?id=26935
---
 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;
 }
 
-- 
1.7.4.1






More information about the wine-patches mailing list