Module: wine Branch: master Commit: 3f7312fdc1aeec1cac782706ca4a0225fa39e9b4 URL: http://source.winehq.org/git/wine.git/?a=commit;h=3f7312fdc1aeec1cac782706ca...
Author: Hans Leidekker hans@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; }