(repertoiremap_hash): Don't specify array size.
[kopensolaris-gnu/glibc.git] / locale / findlocale.c
index 7c77dd8..5f600b6 100644 (file)
@@ -54,11 +54,7 @@ _nl_find_locale (const char *locale_path, size_t locale_path_len,
   const char *revision;
   struct loaded_l10nfile *locale_file;
 
-  if ((*name)[0] == '\0'
-      /* In SUID binaries we must not allow people to access files
-        outside the dedicated locale directories.  */
-      || (__builtin_expect (__libc_enable_secure, 0)
-         && memchr (*name, '/', _nl_find_language (*name) - *name) != NULL))
+  if ((*name)[0] == '\0')
     {
       /* The user decides which locale to use by setting environment
         variables.  */
@@ -67,10 +63,13 @@ _nl_find_locale (const char *locale_path, size_t locale_path_len,
        *name = getenv (_nl_category_names[category]);
       if (*name == NULL || (*name)[0] == '\0')
        *name = getenv ("LANG");
-      if (*name == NULL || (*name)[0] == '\0')
-       *name = (char *) _nl_C_name;
     }
 
+  if (*name == NULL || (*name)[0] == '\0'
+      || (__builtin_expect (__libc_enable_secure, 0)
+         && strchr (*name, '/') != NULL))
+    *name = (char *) _nl_C_name;
+
   if (__builtin_expect (strcmp (*name, _nl_C_name), 1) == 0
       || __builtin_expect (strcmp (*name, _nl_POSIX_name), 1) == 0)
     {
@@ -258,7 +257,7 @@ free_mem (void)
            if (data != NULL && data->usage_count != UNDELETABLE)
              _nl_unload_locale (data);
            runp = runp->next;
-           free (here->filename);
+           free ((char *) here->filename);
            free (here);
          }
       }