Rob Shearman : msi: Set the PackageCode property based on the " revision number" data in the summary information.

Alexandre Julliard julliard at wine.codeweavers.com
Mon Mar 5 13:10:23 CST 2007


Module: wine
Branch: master
Commit: 77f6bc4f8d46950ffcd9eb0d7ddd4b36fa16f9d3
URL:    http://source.winehq.org/git/wine.git/?a=commit;h=77f6bc4f8d46950ffcd9eb0d7ddd4b36fa16f9d3

Author: Rob Shearman <rob at codeweavers.com>
Date:   Mon Mar  5 12:04:41 2007 +0000

msi: Set the PackageCode property based on the "revision number" data in the summary information.

Add a test to show that PackageCode is set by MSI.

---

 dlls/msi/package.c       |   41 ++++++++++++++++++++++++++++++++---------
 dlls/msi/tests/package.c |    5 +++++
 2 files changed, 37 insertions(+), 9 deletions(-)

diff --git a/dlls/msi/package.c b/dlls/msi/package.c
index 74d18cb..73298af 100644
--- a/dlls/msi/package.c
+++ b/dlls/msi/package.c
@@ -459,12 +459,16 @@ static VOID set_installer_properties(MSIPACKAGE *package)
     CloseHandle( hkey );
 }
 
-static UINT msi_get_word_count( MSIPACKAGE *package )
+static UINT msi_load_summary_properties( MSIPACKAGE *package )
 {
     UINT rc;
-    INT word_count;
     MSIHANDLE suminfo;
     MSIHANDLE hdb = alloc_msihandle( &package->db->hdr );
+    INT word_count;
+    DWORD len;
+    LPWSTR package_code;
+    static const WCHAR szPackageCode[] = {
+        'P','a','c','k','a','g','e','C','o','d','e',0};
 
     if (!hdb) {
         ERR("Unable to allocate handle\n");
@@ -475,20 +479,38 @@ static UINT msi_get_word_count( MSIPACKAGE *package )
     if (rc != ERROR_SUCCESS)
     {
         ERR("Unable to open Summary Information\n");
-        return 0;
+        return rc;
     }
 
+    /* load package attributes */
     rc = MsiSummaryInfoGetPropertyW( suminfo, PID_WORDCOUNT, NULL,
                                      &word_count, NULL, NULL, NULL );
-    if (rc != ERROR_SUCCESS)
+    if (rc == ERROR_SUCCESS)
+        package->WordCount = word_count;
+    else
+        WARN("Unable to query word count\n");
+
+    /* load package code property */
+    len = 0;
+    rc = MsiSummaryInfoGetPropertyW( suminfo, PID_REVNUMBER, NULL,
+                                     NULL, NULL, NULL, &len );
+    if (rc == ERROR_MORE_DATA)
     {
-        ERR("Unable to query word count\n");
-        MsiCloseHandle(suminfo);
-        return 0;
+        len++;
+        package_code = msi_alloc( len * sizeof(WCHAR) );
+        rc = MsiSummaryInfoGetPropertyW( suminfo, PID_REVNUMBER, NULL,
+                                         NULL, NULL, package_code, &len );
+        if (rc == ERROR_SUCCESS)
+            MSI_SetPropertyW( package, szPackageCode, package_code );
+        else
+            WARN("Unable to query rev number, %d\n", rc);
+        msi_free( package_code );
     }
+    else
+        WARN("Unable to query rev number, %d\n", rc);
 
     MsiCloseHandle(suminfo);
-    return word_count;
+    return ERROR_SUCCESS;
 }
 
 static MSIPACKAGE *msi_alloc_package( void )
@@ -542,7 +564,7 @@ MSIPACKAGE *MSI_CreatePackage( MSIDATABASE *db, LPWSTR base_url )
         msiobj_addref( &db->hdr );
         package->db = db;
 
-        package->WordCount = msi_get_word_count( package );
+        package->WordCount = 0;
         package->PackagePath = strdupW( db->path );
         package->BaseURL = strdupW( base_url );
 
@@ -553,6 +575,7 @@ MSIPACKAGE *MSI_CreatePackage( MSIDATABASE *db, LPWSTR base_url )
 
         package->ProductCode = msi_dup_property( package, szProductCode );
         set_installed_prop( package );
+        msi_load_summary_properties( package );
     }
 
     return package;
diff --git a/dlls/msi/tests/package.c b/dlls/msi/tests/package.c
index 536fa1e..f461cb6 100644
--- a/dlls/msi/tests/package.c
+++ b/dlls/msi/tests/package.c
@@ -3018,6 +3018,11 @@ static void test_installprops(void)
     ok( r == ERROR_SUCCESS, "failed to get property: %d\n", r);
     trace("Time = %s\n", buf);
 
+    size = MAX_PATH;
+    r = MsiGetProperty(hpkg, "PackageCode", buf, &size);
+    ok( r == ERROR_SUCCESS, "failed to get property: %d\n", r);
+    trace("PackageCode = %s\n", buf);
+
     CloseHandle(hkey);
     MsiCloseHandle(hpkg);
     DeleteFile(msifile);




More information about the wine-cvs mailing list