+2001-07-27 Ulrich Drepper <drepper@redhat.com>
+
+ * iconv/gconv_cache.c (__gconv_compare_alias_cache): New function.
+ * iconv/gconv_int.h: Add prototype for __gconv_compare_alias_cache.
+ * iconv/gconv_charset.h: Replace __gconv_lookup_alias prototype with
+ __gconv_compare_alias prototype.
+ * iconv/gconv_db.c (__gconv_lookup_alias): Removed.
+ (__gconv_compare_alias): New function.
+ * locale/findlocale.c (_nl_find_locale): Ise __gconv_compare_alias
+ instead of calling __gconv_lookup_alias twice and compare here.
+
2001-07-26 Mark Kettenis <kettenis@gnu.org>
* hurd/hurdsig.c (_hurd_internal_post_signal): Fix handling of
/* If NAME is an codeset alias expand it. */
-extern const char *__gconv_lookup_alias (const char *name);
+extern int __gconv_compare_alias (const char *name1, const char *name2)
+ internal_function;
}
-const char *
-__gconv_lookup_alias (const char *name)
+int
+internal_function
+__gconv_compare_alias (const char *name1, const char *name2)
{
+ int result;
+
/* Ensure that the configuration data is read. */
__libc_once (once, __gconv_read_conf);
- return do_lookup_alias (name) ?: name;
+ if (__gconv_compare_alias_cache (name1, name2, &result) != 0)
+ result = strcmp (do_lookup_alias (name1) ?: name1,
+ do_lookup_alias (name2) ?: name2);
+
+ return result;
}
int flags)
internal_function;
+/* Compare the two name for whether they are after alias expansion the
+ same. This function uses the cache and fails if none is
+ loaded. */
+extern int __gconv_compare_alias_cache (const char *name1, const char *name2,
+ int *result) internal_function;
+
/* Free data associated with a step's structure. */
extern void __gconv_release_step (struct __gconv_step *step)
internal_function;
ccodeset = (char *) alloca (strlen (codeset) + 3);
strip (ccodeset, codeset);
- if (strcmp (__gconv_lookup_alias (upstr (ccodeset, ccodeset)),
- __gconv_lookup_alias (upstr (clocale_codeset,
- clocale_codeset))) != 0)
+ if (__gconv_compare_alias (upstr (ccodeset, ccodeset),
+ upstr (clocale_codeset,
+ clocale_codeset)) != 0)
/* The codesets are not identical, don't use the locale. */
return NULL;
}