msi: Update the files' target paths as well, because they may
have changed if a parent directory is changed
Andrey Turkin
pancha at mail.nnov.ru
Tue Jul 4 07:51:19 CDT 2006
James Hawkins wrote:
> Hi,
>
> This fixes bug 5595. The Lotus Notes installer was calling
> MsiSetTargetPath after the CostFinalize action, which is where the
> target paths are originally set for installation files. Originally,
> the directories were being changed, but that doesn't trickle down to
> the file's target paths, so we have to update those too. After this
> change, all the Lotus Notes files install in the correct destination
> directory. Note that this affects other installers as well, but I
> don't remember the numbers off the top of my head.
>
> Changelog:
> * Update the files' target paths as well, because they may have
> changed if a parent directory is changed.
>
> dlls/msi/install.c | 16 ++++++++++++++++
> 1 files changed, 16 insertions(+), 0 deletions(-)
>
> --
> James Hawkins
>
>
> ------------------------------------------------------------------------
>
> diff --git a/dlls/msi/install.c b/dlls/msi/install.c
> index 5eaf10b..a09782d 100644
> --- a/dlls/msi/install.c
> +++ b/dlls/msi/install.c
> @@ -331,6 +331,7 @@ UINT MSI_SetTargetPathW(MSIPACKAGE *pack
> LPWSTR path = NULL;
> LPWSTR path2 = NULL;
> MSIFOLDER *folder;
> + MSIFILE *file;
>
> TRACE("(%p %s %s)\n",package, debugstr_w(szFolder),debugstr_w(szFolderPath));
>
> @@ -374,6 +375,21 @@ UINT MSI_SetTargetPathW(MSIPACKAGE *pack
> path2 = resolve_folder(package, f->Directory, FALSE, TRUE, NULL);
> msi_free(path2);
> }
> +
> + LIST_FOR_EACH_ENTRY( file, &package->files, MSIFILE, entry )
> + {
> + MSICOMPONENT *comp = file->Component;
> + LPWSTR p;
> +
> + if (!comp)
> + continue;
> +
> + p = resolve_folder(package, comp->Directory, FALSE, FALSE, NULL);
> + msi_free(file->TargetPath);
> +
> + file->TargetPath = build_directory_name(2, p, file->FileName);
> + msi_free(p);
> + }
> }
> msi_free(path);
>
>
>
> ------------------------------------------------------------------------
>
>
Hi James,
Funny, your patch looks just identical to mine (submitted but rejected
by some reason) except for comments :)
<!-- beware of if () {} else if () {} else if () ... constructs -->
By the way, does your patch fixes this issue for TARGETPATH? If yes,
then the patch should remove some todo_wine in tests. If no, then do you
plan to fix it in another patch? If no, then I will send patch to fix it
myself later.
More information about the wine-devel
mailing list