Module: wine Branch: master Commit: 08443b3bf7f5535dc438b64e9f8aeb9976b64424 URL: http://source.winehq.org/git/wine.git/?a=commit;h=08443b3bf7f5535dc438b64e9f...
Author: James Hawkins truiken@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");