From 9a018f6c44b7393e4ac1f57d504b9c054e2d0533 Mon Sep 17 00:00:00 2001 From: Ulrich Drepper Date: Fri, 27 Jul 2001 17:34:53 +0000 Subject: Update. 2001-07-27 Ulrich Drepper * 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. --- ChangeLog | 11 +++++++++++ iconv/gconv_charset.h | 3 ++- iconv/gconv_db.c | 13 ++++++++++--- iconv/gconv_int.h | 6 ++++++ locale/findlocale.c | 6 +++--- 5 files changed, 32 insertions(+), 7 deletions(-) diff --git a/ChangeLog b/ChangeLog index e98129e..0fc053f 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,14 @@ +2001-07-27 Ulrich Drepper + + * 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 * hurd/hurdsig.c (_hurd_internal_post_signal): Fix handling of diff --git a/iconv/gconv_charset.h b/iconv/gconv_charset.h index 1e2b76b..b0b2807 100644 --- a/iconv/gconv_charset.h +++ b/iconv/gconv_charset.h @@ -57,4 +57,5 @@ upstr (char *dst, const char *str) /* 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; diff --git a/iconv/gconv_db.c b/iconv/gconv_db.c index 47861d1..9bd27c5 100644 --- a/iconv/gconv_db.c +++ b/iconv/gconv_db.c @@ -632,13 +632,20 @@ do_lookup_alias (const char *name) } -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; } diff --git a/iconv/gconv_int.h b/iconv/gconv_int.h index 13698d8..3b5f195 100644 --- a/iconv/gconv_int.h +++ b/iconv/gconv_int.h @@ -188,6 +188,12 @@ extern int __gconv_lookup_cache (const char *toset, const char *fromset, 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; diff --git a/locale/findlocale.c b/locale/findlocale.c index 2770258..59b9992 100644 --- a/locale/findlocale.c +++ b/locale/findlocale.c @@ -207,9 +207,9 @@ _nl_find_locale (const char *locale_path, size_t locale_path_len, 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; } -- cgit v1.1