summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--newlib/ChangeLog6
-rw-r--r--newlib/libc/locale/locale.c16
2 files changed, 20 insertions, 2 deletions
diff --git a/newlib/ChangeLog b/newlib/ChangeLog
index cb1723b0e..b57e356a8 100644
--- a/newlib/ChangeLog
+++ b/newlib/ChangeLog
@@ -1,3 +1,9 @@
+2009-10-09 Corinna Vinschen <corinna@vinschen.de>
+
+ * libc/locale/locale.c (DEFAULT_LOCALE): New define.
+ (__default_locale): New global variable set to the default locale.
+ (__get_locale_env): Return __default_locale rather than fixed "C".
+
2009-10-08 Jeff Johnston <jjohnstn@redhat.com>
* configure.host: For RTEMS, define HAVE_ASSERT_FUNC.
diff --git a/newlib/libc/locale/locale.c b/newlib/libc/locale/locale.c
index 25b1a00d5..311a43820 100644
--- a/newlib/libc/locale/locale.c
+++ b/newlib/libc/locale/locale.c
@@ -205,6 +205,18 @@ static char *categories[_LC_LAST] = {
};
/*
+ * Default locale per POSIX. Can be overridden on a per-target base.
+ */
+#ifndef DEFAULT_LOCALE
+#define DEFAULT_LOCALE "C"
+#endif
+/*
+ * This variable can be changed by any outside mechanism. This allows,
+ * for instance, to load the default locale from a file.
+ */
+char __default_locale[ENCODING_LEN + 1] = DEFAULT_LOCALE;
+
+/*
* Current locales for each category
*/
static char current_categories[_LC_LAST][ENCODING_LEN + 1] = {
@@ -731,9 +743,9 @@ __get_locale_env(struct _reent *p, int category)
if (env == NULL || !*env)
env = _getenv_r (p, "LANG");
- /* 4. if none is set, fall to "C" */
+ /* 4. if none is set, fall to default locale */
if (env == NULL || !*env)
- env = "C";
+ env = __default_locale;
return env;
}