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