James Hawkins : msi: PackagePath must also include the package name.
Alexandre Julliard
julliard at wine.codeweavers.com
Tue Jul 3 08:01:32 CDT 2007
Module: wine
Branch: master
Commit: 08443b3bf7f5535dc438b64e9f8aeb9976b64424
URL: http://source.winehq.org/git/wine.git/?a=commit;h=08443b3bf7f5535dc438b64e9f8aeb9976b64424
Author: James Hawkins <truiken at gmail.com>
Date: Mon Jul 2 20:19:46 2007 -0700
msi: PackagePath must also include the package name.
---
dlls/msi/action.c | 40 ++++++++++++++++++++++++----------------
dlls/msi/tests/install.c | 7 ++-----
2 files changed, 26 insertions(+), 21 deletions(-)
diff --git a/dlls/msi/action.c b/dlls/msi/action.c
index cc2583d..f09a1b9 100644
--- a/dlls/msi/action.c
+++ b/dlls/msi/action.c
@@ -629,35 +629,43 @@ UINT MSI_InstallPackage( MSIPACKAGE *package, LPCWSTR szPackagePath,
if (szPackagePath)
{
- LPWSTR p, check, path;
-
- path = strdupW(szPackagePath);
- p = strrchrW(path,'\\');
+ LPWSTR p, check, dir;
+
+ dir = strdupW(szPackagePath);
+ p = strrchrW(dir, '\\');
if (p)
+ *(++p) = 0;
+ else
{
- p++;
- *p=0;
+ msi_free(dir);
+ dir = msi_alloc(MAX_PATH*sizeof(WCHAR));
+ GetCurrentDirectoryW(MAX_PATH, dir);
+ lstrcatW(dir, cszbs);
+ p = (LPWSTR)szPackagePath;
}
- else
+
+ msi_free( package->PackagePath );
+ package->PackagePath = msi_alloc((lstrlenW(dir) + lstrlenW(p) + 2) * sizeof(WCHAR));
+ if (!package->PackagePath)
{
- msi_free(path);
- path = msi_alloc(MAX_PATH*sizeof(WCHAR));
- GetCurrentDirectoryW(MAX_PATH,path);
- strcatW(path,cszbs);
+ msi_free(dir);
+ return ERROR_OUTOFMEMORY;
}
+ lstrcpyW(package->PackagePath, dir);
+ lstrcatW(package->PackagePath, cszbs);
+ lstrcatW(package->PackagePath, p);
+
check = msi_dup_property( package, cszSourceDir );
if (!check)
- MSI_SetPropertyW(package, cszSourceDir, path);
+ MSI_SetPropertyW(package, cszSourceDir, dir);
msi_free(check);
check = msi_dup_property( package, cszSOURCEDIR );
if (!check)
- MSI_SetPropertyW(package, cszSOURCEDIR, path);
-
- msi_free( package->PackagePath );
- package->PackagePath = path;
+ MSI_SetPropertyW(package, cszSOURCEDIR, dir);
+ msi_free(dir);
msi_free(check);
}
diff --git a/dlls/msi/tests/install.c b/dlls/msi/tests/install.c
index 7af097e..421fd85 100644
--- a/dlls/msi/tests/install.c
+++ b/dlls/msi/tests/install.c
@@ -2244,11 +2244,8 @@ static void test_publishsourcelist(void)
r = MsiSourceListGetInfoA(prodcode, NULL, MSIINSTALLCONTEXT_USERUNMANAGED,
MSICODE_PRODUCT, INSTALLPROPERTY_PACKAGENAME, value, &size);
ok(r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", r);
- todo_wine
- {
- ok(!lstrcmpA(value, "msitest.msi"), "Expected 'msitest.msi', got %s\n", value);
- ok(size == 11, "Expected 11, got %d\n", size);
- }
+ ok(!lstrcmpA(value, "msitest.msi"), "Expected 'msitest.msi', got %s\n", value);
+ ok(size == 11, "Expected 11, got %d\n", size);
/* complete uninstall */
r = MsiInstallProductA(msifile, "FULL=1 REMOVE=ALL");
More information about the wine-cvs
mailing list