2002-08-09 Roland McGrath <roland@redhat.com>
authorroland <roland>
Sat, 10 Aug 2002 06:21:32 +0000 (06:21 +0000)
committerroland <roland>
Sat, 10 Aug 2002 06:21:32 +0000 (06:21 +0000)
* locale/findlocale.c (_nl_default_locale_path): New variable.
(_nl_find_locale): If LOCALE_PATH is null, default to that.
* locale/localeinfo.h: Declare it.
* locale/setlocale.c (setlocale): Use _nl_default_locale_path
in place of LOCALEDIR.  If no LOCPATH, pass null to _nl_find_locale.
* locale/newlocale.c (__newlocale): Likewise.

locale/newlocale.c
locale/setlocale.c

index 6bab98e..14c116b 100644 (file)
@@ -80,19 +80,22 @@ __newlocale (int category_mask, const char *locale, __locale_t base)
   /* We perhaps really have to load some data.  So we determine the
      path in which to look for the data now.  The environment variable
      `LOCPATH' must only be used when the binary has no SUID or SGID
-     bit set.  */
+     bit set.  If using the default path, we tell _nl_find_locale
+     by passing null and it can check the canonical locale archive.  */
   locale_path = NULL;
   locale_path_len = 0;
 
   locpath_var = getenv ("LOCPATH");
   if (locpath_var != NULL && locpath_var[0] != '\0')
-    if (__argz_create_sep (locpath_var, ':',
-                          &locale_path, &locale_path_len) != 0)
-      return NULL;
+    {
+      if (__argz_create_sep (locpath_var, ':',
+                            &locale_path, &locale_path_len) != 0)
+       return NULL;
 
-  if (__argz_append (&locale_path, &locale_path_len,
-                    LOCALEDIR, sizeof (LOCALEDIR)) != 0)
-    return NULL;
+      if (__argz_add_sep (&locale_path, &locale_path_len,
+                         _nl_default_locale_path, ':') != 0)
+       return NULL;
+    }
 
   /* Get the names for the locales we are interested in.  We either
      allow a composite name or a single name.  */
index 50963d1..46af339 100644 (file)
@@ -247,18 +247,22 @@ setlocale (int category, const char *locale)
   /* We perhaps really have to load some data.  So we determine the
      path in which to look for the data now.  The environment variable
      `LOCPATH' must only be used when the binary has no SUID or SGID
-     bit set.  */
+     bit set.  If using the default path, we tell _nl_find_locale
+     by passing null and it can check the canonical locale archive.  */
   locale_path = NULL;
   locale_path_len = 0;
 
   locpath_var = getenv ("LOCPATH");
   if (locpath_var != NULL && locpath_var[0] != '\0')
-    if (__argz_create_sep (locpath_var, ':',
-                          &locale_path, &locale_path_len) != 0)
-      return NULL;
+    {
+      if (__argz_create_sep (locpath_var, ':',
+                            &locale_path, &locale_path_len) != 0)
+       return NULL;
 
-  if (__argz_add_sep (&locale_path, &locale_path_len, LOCALEDIR, ':') != 0)
-    return NULL;
+      if (__argz_add_sep (&locale_path, &locale_path_len,
+                         _nl_default_locale_path, ':') != 0)
+       return NULL;
+    }
 
   if (category == LC_ALL)
     {