https://git.reactos.org/?p=reactos.git;a=commitdiff;h=8c4b2b004b6f6818be7b1…
commit 8c4b2b004b6f6818be7b10baf58732fba3fef2af
Author: winesync <ros-dev(a)reactos.org>
AuthorDate: Sun Mar 13 00:16:21 2022 +0100
Commit: Mark Jansen <mark.jansen(a)reactos.org>
CommitDate: Sun Mar 20 19:28:07 2022 +0100
[WINESYNC] msi: Only perform the media check if the label of the disk entry differs
from the last.
Wine-Bug:
https://bugs.winehq.org/show_bug.cgi?id=40433
Signed-off-by: Hans Leidekker <hans(a)codeweavers.com>
Signed-off-by: Alexandre Julliard <julliard(a)winehq.org>
wine commit id 85fea53af80d324a4cf7f80a45f43fed8d8d65e1 by Hans Leidekker
<hans(a)codeweavers.com>
---
dll/win32/msi/media.c | 26 +++++++++++++++++---------
dll/win32/msi/msipriv.h | 1 +
2 files changed, 18 insertions(+), 9 deletions(-)
diff --git a/dll/win32/msi/media.c b/dll/win32/msi/media.c
index 5f8c26a3443..09aac094183 100644
--- a/dll/win32/msi/media.c
+++ b/dll/win32/msi/media.c
@@ -664,6 +664,7 @@ void msi_free_media_info(MSIMEDIAINFO *mi)
msi_free(mi->disk_prompt);
msi_free(mi->cabinet);
msi_free(mi->volume_label);
+ msi_free(mi->last_volume);
msi_free(mi);
}
@@ -898,20 +899,27 @@ UINT ready_media( MSIPACKAGE *package, BOOL compressed, MSIMEDIAINFO
*mi )
}
}
/* check volume matches, change media if not */
- if (mi->volume_label && mi->disk_id > 1)
+ if (mi->volume_label)
{
- WCHAR *source = msi_dup_property( package->db, szSourceDir );
- BOOL match = source_matches_volume( mi, source );
- msi_free( source );
-
- if (!match && (mi->type == DRIVE_CDROM || mi->type ==
DRIVE_REMOVABLE))
+ /* assume first volume is in the drive */
+ if (mi->last_volume && strcmpiW( mi->last_volume,
mi->volume_label ))
{
- if ((rc = msi_change_media( package, mi )) != ERROR_SUCCESS)
+ WCHAR *source = msi_dup_property( package->db, szSourceDir );
+ BOOL match = source_matches_volume( mi, source );
+ msi_free( source );
+
+ if (!match && (mi->type == DRIVE_CDROM || mi->type ==
DRIVE_REMOVABLE))
{
- msi_free( cabinet_file );
- return rc;
+ if ((rc = msi_change_media( package, mi )) != ERROR_SUCCESS)
+ {
+ msi_free( cabinet_file );
+ return rc;
+ }
}
}
+
+ msi_free(mi->last_volume);
+ mi->last_volume = strdupW(mi->volume_label);
}
if (mi->cabinet)
{
diff --git a/dll/win32/msi/msipriv.h b/dll/win32/msi/msipriv.h
index c59ce940c6d..a637cfcc80d 100644
--- a/dll/win32/msi/msipriv.h
+++ b/dll/win32/msi/msipriv.h
@@ -173,6 +173,7 @@ typedef struct tagMSIMEDIAINFO
LPWSTR disk_prompt;
LPWSTR cabinet;
LPWSTR volume_label;
+ LPWSTR last_volume;
BOOL is_continuous;
BOOL is_extracted;
WCHAR sourcedir[MAX_PATH];