From 23169289e6a2f43b256a3b2c8626bfe3dc3e864f Mon Sep 17 00:00:00 2001 From: Hans Leidekker Date: Mon, 6 Dec 2010 13:20:02 +0100 Subject: [PATCH] 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 deletion(-) diff --git a/dlls/msi/package.c b/dlls/msi/package.c index a81d0bd1164..907768b2bd7 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 58bc681c315..211d6a81af0 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");