bug 13986: setdefaultlanguage does not set value correctly in Windows registry 88/17488/3
Antoine ELIAS [Fri, 20 Nov 2015 15:51:33 +0000 (16:51 +0100)]
Change-Id: Ifd52bd85e9fa92dd551c690748300b3fc64f9059

scilab/CHANGES_6.0.X
scilab/modules/localization/src/c/LanguagePreferences_Windows.c
scilab/modules/localization/tests/nonreg_tests/bug_13986.dia.ref [new file with mode: 0644]
scilab/modules/localization/tests/nonreg_tests/bug_13986.tst [new file with mode: 0644]

index a4be33a..4817544 100644 (file)
@@ -13,6 +13,8 @@ For a high-level overview of the changes in this release, please consult the "Wh
         Changes between version 6.0.0-alpha-2 and 6.0.0-beta-1
         ======================================================
 
+* Bug #13986 fixed - setdefaultlanguage did not set value correctly in Windows registry.
+
 * Bug #13990 fixed - Windows installer did not ship all localization files.
 
 * Bug #14181 fixed - Calling intg (or integrate) in a function that is being integrated failed
index 96a55bc..38e5157 100644 (file)
@@ -188,10 +188,9 @@ static wchar_t *getLanguagePreferencesAllUsers(void)
 BOOL setLanguagePreferences(void)
 {
     wchar_t* pwstLang = getlanguage();
-    char *LANGUAGE = wide_string_to_UTF8(pwstLang);
-    free(pwstLang);
+    DWORD length = ((DWORD)wcslen(pwstLang) + 1) * 2;
 
-    if (LANGUAGE)
+    if (pwstLang)
     {
         wchar_t *keyString = NULL;
         int lenkeyString = (int)(wcslen(HKCU_LANGUAGE_FORMAT) + wcslen(SCI_VERSION_WIDE_STRING)) + 1;
@@ -223,10 +222,12 @@ BOOL setLanguagePreferences(void)
                     FREE(keyString);
                     keyString = NULL;
                 }
+
+                free(pwstLang);
                 return FALSE;
             }
 
-            if ( RegSetValueExW(hKey, LANGUAGE_ENTRY, 0, REG_SZ, (LPBYTE)LANGUAGE, (DWORD)(strlen(LANGUAGE) + 1)) != ERROR_SUCCESS)
+            if (RegSetValueExW(hKey, LANGUAGE_ENTRY, 0, REG_SZ, (LPBYTE)pwstLang, length) != ERROR_SUCCESS)
             {
                 RegCloseKey(hKey);
                 if (keyString)
@@ -234,6 +235,8 @@ BOOL setLanguagePreferences(void)
                     FREE(keyString);
                     keyString = NULL;
                 }
+
+                free(pwstLang);
                 return FALSE;
             }
 
@@ -243,8 +246,12 @@ BOOL setLanguagePreferences(void)
                 FREE(keyString);
                 keyString = NULL;
             }
+
+            free(pwstLang);
             return TRUE;
         }
+
+        free(pwstLang);
     }
     return FALSE;
 }
diff --git a/scilab/modules/localization/tests/nonreg_tests/bug_13986.dia.ref b/scilab/modules/localization/tests/nonreg_tests/bug_13986.dia.ref
new file mode 100644 (file)
index 0000000..57a0a44
--- /dev/null
@@ -0,0 +1,69 @@
+// =============================================================================
+// Scilab ( http://www.scilab.org/ ) - This file is part of Scilab
+// Copyright (C) 2015 - Scilab Enterprises - Antoine ELIAS
+//
+//  This file is distributed under the same license as the Scilab package.
+// =============================================================================
+// <-- WINDOWS ONLY -->
+//
+// <-- CLI SHELL MODE -->
+//
+// <-- Non-regression test for bug 13986 -->
+//
+// <-- Bugzilla URL -->
+// http://bugzilla.scilab.org/show_bug.cgi?id=13986
+//
+// <-- Short Description -->
+// setdefaultlanguage does not set correctly in Windows registry
+old = getlanguage();
+lang = [ ...
+    "zh_TW" ...
+    "zh_CN" ...
+    "uk_UA" ...
+    "ru_RU" ...
+    "pt_BR" ...
+    "pl_PL" ...
+    "ja_JP" ...
+    "it_IT" ...
+    "fr_FR" ...
+    "es_ES" ...
+    "en_US" ...
+    "de_DE" ...
+    "cs_CZ" ...
+    "ca_ES"];
+for l = lang
+    setdefaultlanguage(l);
+    val = winqueryreg("HKEY_CURRENT_USER", "SOFTWARE\Scilab\" + getversion() + "\Settings", "LANGUAGE");
+    assert_checkequal(val, l);
+end
+在主控模式下無法切換此選單上的語言.
+重新啟動 Scilab 以套用選單.
+不可以在正在运行的控制台中改变菜单的语言。
+重启 Scilab 以将改变应用到菜单。
+У запущеній консолі мову меню змінити не можна.
+Перезапустіть Scilab, щоб застосувати зміни у меню.
+Не удалось сменить язык для меню в запущенном командном окне.
+Перезапустите Scilab для обновления меню.
+O idioma para menus não pode ser modificada em um console que esteja sendo executado.
+Reinicie o Scilab para aplicar as mudanças aos menus.
+Zmiana języka menu nie może być wykonana przy uruchomionej konsoli.
+Zrestartuj Scilab, aby zastosować zmiany w menu.
+メニューの言語は,実行中のコンソールでは変更できません.
+メニューに適用するためにScilabを再起動してください.
+La lingua dei menù non può essere cambiata in un terminale attivo.
+Riavviare Scilab per applicarla ai menù.
+Le langage des menus ne peut pas être changé dans une console en cours de fonctionnement.
+Redémarrer Scilab pour appliquer les changements aux menus.
+El idioma de los menús no puede ser modificado en una consola en ejecución.
+Reinicie Scilab para aplicar a los menús.
+The language for menus cannot be changed on a running console.
+Restart Scilab to apply to menus.
+Die Sprache für Menüs kann nicht bei laufender Konsole geändert werden.
+Starten Sie Scilab, um dies auf Menüs anzuwenden.
+Jazyk po nabídky nelze změnit na spuštěné konzoli.
+Restartujte Scilab pro použití do nabídek.
+No es pot canviar l'idioma dels menús en una consola en execució.
+Reinicieu el Scilab per aplicar-ho als menús.
+setdefaultlanguage(old);
+Le langage des menus ne peut pas être changé dans une console en cours de fonctionnement.
+Redémarrer Scilab pour appliquer les changements aux menus.
diff --git a/scilab/modules/localization/tests/nonreg_tests/bug_13986.tst b/scilab/modules/localization/tests/nonreg_tests/bug_13986.tst
new file mode 100644 (file)
index 0000000..d8604f9
--- /dev/null
@@ -0,0 +1,44 @@
+// =============================================================================
+// Scilab ( http://www.scilab.org/ ) - This file is part of Scilab
+// Copyright (C) 2015 - Scilab Enterprises - Antoine ELIAS
+//
+//  This file is distributed under the same license as the Scilab package.
+// =============================================================================
+// <-- WINDOWS ONLY -->
+//
+// <-- CLI SHELL MODE -->
+//
+// <-- Non-regression test for bug 13986 -->
+//
+// <-- Bugzilla URL -->
+// http://bugzilla.scilab.org/show_bug.cgi?id=13986
+//
+// <-- Short Description -->
+// setdefaultlanguage does not set correctly in Windows registry
+
+old = getlanguage();
+
+lang = [ ...
+"zh_TW" ...
+"zh_CN" ...
+"uk_UA" ...
+"ru_RU" ...
+"pt_BR" ...
+"pl_PL" ...
+"ja_JP" ...
+"it_IT" ...
+"fr_FR" ...
+"es_ES" ...
+"en_US" ...
+"de_DE" ...
+"cs_CZ" ...
+"ca_ES"];
+
+for l = lang
+    setdefaultlanguage(l);
+    val = winqueryreg("HKEY_CURRENT_USER", "SOFTWARE\Scilab\" + getversion() + "\Settings", "LANGUAGE");
+    assert_checkequal(val, l);
+end
+
+
+setdefaultlanguage(old);