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@codeweavers.com> Signed-off-by: Alexandre Julliard <julliard@winehq.org>
This commit is contained in:
parent
a853bb6d0a
commit
85fea53af8
|
@ -664,6 +664,7 @@ void msi_free_media_info(MSIMEDIAINFO *mi)
|
||||||
msi_free(mi->disk_prompt);
|
msi_free(mi->disk_prompt);
|
||||||
msi_free(mi->cabinet);
|
msi_free(mi->cabinet);
|
||||||
msi_free(mi->volume_label);
|
msi_free(mi->volume_label);
|
||||||
|
msi_free(mi->last_volume);
|
||||||
msi_free(mi);
|
msi_free(mi);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -898,20 +899,27 @@ UINT ready_media( MSIPACKAGE *package, BOOL compressed, MSIMEDIAINFO *mi )
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
/* check volume matches, change media if not */
|
/* 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 );
|
/* assume first volume is in the drive */
|
||||||
BOOL match = source_matches_volume( mi, source );
|
if (mi->last_volume && strcmpiW( mi->last_volume, mi->volume_label ))
|
||||||
msi_free( source );
|
|
||||||
|
|
||||||
if (!match && (mi->type == DRIVE_CDROM || mi->type == DRIVE_REMOVABLE))
|
|
||||||
{
|
{
|
||||||
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 );
|
if ((rc = msi_change_media( package, mi )) != ERROR_SUCCESS)
|
||||||
return rc;
|
{
|
||||||
|
msi_free( cabinet_file );
|
||||||
|
return rc;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
msi_free(mi->last_volume);
|
||||||
|
mi->last_volume = strdupW(mi->volume_label);
|
||||||
}
|
}
|
||||||
if (mi->cabinet)
|
if (mi->cabinet)
|
||||||
{
|
{
|
||||||
|
|
|
@ -173,6 +173,7 @@ typedef struct tagMSIMEDIAINFO
|
||||||
LPWSTR disk_prompt;
|
LPWSTR disk_prompt;
|
||||||
LPWSTR cabinet;
|
LPWSTR cabinet;
|
||||||
LPWSTR volume_label;
|
LPWSTR volume_label;
|
||||||
|
LPWSTR last_volume;
|
||||||
BOOL is_continuous;
|
BOOL is_continuous;
|
||||||
BOOL is_extracted;
|
BOOL is_extracted;
|
||||||
WCHAR sourcedir[MAX_PATH];
|
WCHAR sourcedir[MAX_PATH];
|
||||||
|
|
Loading…
Reference in New Issue