OSDN Git Service

* libc/locale/locale.c (DEFAULT_LOCALE): New define.
authorcorinna <corinna>
Fri, 9 Oct 2009 08:25:28 +0000 (08:25 +0000)
committercorinna <corinna>
Fri, 9 Oct 2009 08:25:28 +0000 (08:25 +0000)
(__default_locale): New global variable set to the default locale.
(__get_locale_env): Return __default_locale rather than fixed "C".

newlib/ChangeLog
newlib/libc/locale/locale.c

index cb1723b..b57e356 100644 (file)
@@ -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.
index 25b1a00..311a438 100644 (file)
@@ -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;
 }