msi [4/6]: Extract cabinets in ACTION_InstallFiles. ready_media is
for finding and loading medi
James Hawkins
truiken at gmail.com
Wed Nov 8 16:05:47 CST 2006
Hi,
Changelog:
* Extract cabinets in ACTION_InstallFiles. ready_media is for finding
and loading medi.
dlls/msi/files.c | 61 ++++++++++++++++++++---------------------------------
1 files changed, 23 insertions(+), 38 deletions(-)
--
James Hawkins
-------------- next part --------------
diff --git a/dlls/msi/files.c b/dlls/msi/files.c
index 5f7232b..151ba58 100644
--- a/dlls/msi/files.c
+++ b/dlls/msi/files.c
@@ -467,8 +467,7 @@ static UINT load_media_info(MSIPACKAGE *
return ERROR_SUCCESS;
}
-static UINT ready_media_for_file( MSIPACKAGE *package, struct media_info *mi,
- MSIFILE *file )
+static UINT ready_media(MSIPACKAGE *package, MSIFILE *file, struct media_info *mi)
{
UINT rc = ERROR_SUCCESS;
BOOL found = FALSE;
@@ -480,33 +479,21 @@ static UINT ready_media_for_file( MSIPAC
return ERROR_FUNCTION_FAILED;
}
- if (mi->cabinet)
+ if (file->IsCompressed &&
+ GetFileAttributesW(mi->source) == INVALID_FILE_ATTRIBUTES)
{
- TRACE("Source is CAB %s\n", debugstr_w(mi->cabinet));
-
- /* only download the remote cabinet file if a local copy does not exist */
- if (GetFileAttributesW(mi->source) == INVALID_FILE_ATTRIBUTES &&
- UrlIsW(package->BaseURL, URLIS_URL))
+ if (package->BaseURL && UrlIsW(package->BaseURL, URLIS_URL))
{
rc = download_remote_cabinet(package, mi);
- if (rc != ERROR_SUCCESS ||
- GetFileAttributesW(mi->source) == INVALID_FILE_ATTRIBUTES)
+ if (rc == ERROR_SUCCESS &&
+ GetFileAttributesW(mi->source) != INVALID_FILE_ATTRIBUTES)
{
- found = FALSE;
+ found = TRUE;
}
}
if (!found)
- {
rc = msi_change_media(package, mi);
- if (rc != ERROR_SUCCESS)
- {
- ERR("Cabinet not found: %s\n", debugstr_w(mi->cabinet));
- return ERROR_FUNCTION_FAILED;
- }
- }
-
- rc = !extract_cabinet_file(package, mi);
}
return rc;
@@ -602,7 +589,7 @@ UINT ACTION_InstallFiles(MSIPACKAGE *pac
ptr = strrchrW(package->PackagePath,'\\');
if (ptr)
{
- ptr ++;
+ ptr++;
MsiSourceListSetInfoW(package->ProductCode, NULL,
MSIINSTALLCONTEXT_USERMANAGED,
MSICODE_PRODUCT,
@@ -628,13 +615,20 @@ UINT ACTION_InstallFiles(MSIPACKAGE *pac
if (file->Sequence > mi->last_sequence || mi->is_continuous)
{
- rc = ready_media_for_file( package, mi, file );
+ rc = ready_media(package, file, mi);
if (rc != ERROR_SUCCESS)
{
ERR("Failed to ready media\n");
rc = ERROR_FUNCTION_FAILED;
break;
}
+
+ if (file->IsCompressed && !extract_cabinet_file(package, mi))
+ {
+ ERR("Failed to extract cabinet: %s\n", debugstr_w(mi->cabinet));
+ rc = ERROR_FUNCTION_FAILED;
+ break;
+ }
}
set_file_source(package, file, mi->source);
@@ -642,34 +636,25 @@ UINT ACTION_InstallFiles(MSIPACKAGE *pac
TRACE("file paths %s to %s\n",debugstr_w(file->SourcePath),
debugstr_w(file->TargetPath));
- if (file->state != msifs_missing && file->state != msifs_overwrite)
- continue;
-
- /* compressed files are extracted in ready_media_for_file */
- if (file->IsCompressed)
+ if (!file->IsCompressed)
{
- if (INVALID_FILE_ATTRIBUTES == GetFileAttributesW(file->TargetPath))
+ rc = copy_install_file(file);
+ if (rc != ERROR_SUCCESS)
{
- ERR("compressed file wasn't extracted (%s)\n",
- debugstr_w(file->TargetPath));
+ ERR("Failed to copy %s to %s (%d)\n", debugstr_w(file->SourcePath),
+ debugstr_w(file->TargetPath), rc);
rc = ERROR_INSTALL_FAILURE;
break;
}
-
- continue;
}
-
- rc = copy_install_file(file);
- if (rc != ERROR_SUCCESS)
+ else if (file->state != msifs_installed)
{
- ERR("Failed to copy %s to %s (%d)\n", debugstr_w(file->SourcePath),
- debugstr_w(file->TargetPath), rc);
+ ERR("compressed file wasn't extracted (%s)\n", debugstr_w(file->TargetPath));
rc = ERROR_INSTALL_FAILURE;
break;
}
}
- /* cleanup */
free_media_info( mi );
return rc;
}
--
1.4.3
More information about the wine-patches
mailing list