From 608a3e40f59af9bacc9a474c258f0e9364222b95 Mon Sep 17 00:00:00 2001 From: andyetitmoves Date: Thu, 1 Dec 2005 16:53:20 +0000 Subject: [PATCH] (e_intl_language_set) Fixed a bug when lang is NULL. The expected behaviour is to restore the original environment variables. The code, after doing this, sets back all the env vars to _e_intl_language. This fails when the different locale env vars have different values. SVN revision: 18766 --- src/bin/e_intl.c | 28 ++++++++++++---------------- 1 file changed, 12 insertions(+), 16 deletions(-) diff --git a/src/bin/e_intl.c b/src/bin/e_intl.c index a1181ab5f..e4e101ec5 100644 --- a/src/bin/e_intl.c +++ b/src/bin/e_intl.c @@ -137,8 +137,16 @@ void e_intl_language_set(const char *lang) { if (_e_intl_language) free(_e_intl_language); - /* NULL lang means set everything back to the original environemtn defaults */ - if (!lang) + if (lang) + { + e_util_env_set("LANGUAGE", _e_intl_language); + /* FIXME: maybe we should set these anyway? */ + if (getenv("LANG")) e_util_env_set("LANG", _e_intl_language); + if (getenv("LC_ALL")) e_util_env_set("LC_ALL", _e_intl_language); + if (getenv("LC_MESSAGES")) e_util_env_set("LC_MESSAGES", _e_intl_language); + } + /* NULL lang means set everything back to the original environment defaults */ + else { e_util_env_set("LC_MESSAGES", _e_intl_orig_lc_messages); e_util_env_set("LANGUAGE", _e_intl_orig_language); @@ -149,23 +157,11 @@ e_intl_language_set(const char *lang) if (!lang) lang = getenv("LANGUAGE"); if (!lang) lang = getenv("LC_ALL"); if (!lang) lang = getenv("LANG"); - if (lang) - { - _e_intl_language = strdup(lang); - e_util_env_set("LANGUAGE", _e_intl_language); - /* FIXME: maybe we should set these anyway? */ - if (getenv("LANG")) e_util_env_set("LANG", _e_intl_language); - if (getenv("LC_ALL")) e_util_env_set("LC_ALL", _e_intl_language); - if (getenv("LC_MESSAGES")) e_util_env_set("LC_MESSAGES", _e_intl_language); - } - else - { - _e_intl_language = NULL; - } + _e_intl_language = (lang ? strdup (lang) : NULL); if (setlocale(LC_ALL, _e_intl_language) == NULL) { - perror("setlocale() :"); + perror("setlocale()"); if (_e_intl_language) printf("An error occured when trying to use the locale: %s\nDetails:\n", _e_intl_language);