Hans Leidekker : msi: Map neutral parts of package language ids to the system default language id .

Alexandre Julliard julliard at winehq.org
Mon Dec 6 13:18:33 CST 2010


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

Author: Hans Leidekker <hans at codeweavers.com>
Date:   Mon Dec  6 13:20:02 2010 +0100

msi: Map neutral parts of package language ids to the system default language id.

---

 dlls/msi/package.c       |   12 +++++++++++-
 dlls/msi/tests/install.c |   17 +++++++++++++++++
 2 files changed, 28 insertions(+), 1 deletions(-)

diff --git a/dlls/msi/package.c b/dlls/msi/package.c
index a81d0bd..907768b 100644
--- a/dlls/msi/package.c
+++ b/dlls/msi/package.c
@@ -1402,7 +1402,17 @@ static UINT validate_package( MSIPACKAGE *package )
     }
     for (i = 0; i < package->num_langids; i++)
     {
-        if (!package->langids[i] || IsValidLocale( package->langids[i], LCID_INSTALLED ))
+        LANGID langid = package->langids[i];
+
+        if (PRIMARYLANGID( langid ) == LANG_NEUTRAL)
+        {
+            langid = MAKELANGID( PRIMARYLANGID( GetSystemDefaultLangID() ), SUBLANGID( langid ) );
+        }
+        if (SUBLANGID( langid ) == SUBLANG_NEUTRAL)
+        {
+            langid = MAKELANGID( PRIMARYLANGID( langid ), SUBLANGID( GetSystemDefaultLangID() ) );
+        }
+        if (IsValidLocale( langid, LCID_INSTALLED ))
             return ERROR_SUCCESS;
     }
     return ERROR_INSTALL_LANGUAGE_UNSUPPORTED;
diff --git a/dlls/msi/tests/install.c b/dlls/msi/tests/install.c
index 58bc681..211d6a8 100644
--- a/dlls/msi/tests/install.c
+++ b/dlls/msi/tests/install.c
@@ -6057,6 +6057,23 @@ static void test_package_validation(void)
     ok(!delete_pf("msitest\\maximus", TRUE), "file exists\n");
     ok(!delete_pf("msitest", FALSE), "directory exists\n");
 
+    if (GetSystemDefaultLangID() == MAKELANGID( LANG_ENGLISH, SUBLANG_ENGLISH_US ))
+    {
+        DeleteFile(msifile);
+        create_database_template(msifile, pv_tables, sizeof(pv_tables)/sizeof(msi_table), 100, "Intel;9");
+        r = MsiInstallProductA(msifile, NULL);
+        ok(r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %u\n", r);
+        ok(delete_pf("msitest\\maximus", TRUE), "file does not exist\n");
+        ok(delete_pf("msitest", FALSE), "directory does not exist\n");
+
+        DeleteFile(msifile);
+        create_database_template(msifile, pv_tables, sizeof(pv_tables)/sizeof(msi_table), 100, "Intel;1024");
+        r = MsiInstallProductA(msifile, NULL);
+        ok(r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %u\n", r);
+        ok(delete_pf("msitest\\maximus", TRUE), "file does not exist\n");
+        ok(delete_pf("msitest", FALSE), "directory does not exist\n");
+    }
+
     DeleteFile(msifile);
     create_database_template(msifile, pv_tables, sizeof(pv_tables)/sizeof(msi_table), 100, "Intel32;0");
 




More information about the wine-cvs mailing list