about summary refs log tree commit diff
path: root/iconv/gconv_db.c
diff options
context:
space:
mode:
authorUlrich Drepper <drepper@redhat.com>2001-04-06 17:49:18 +0000
committerUlrich Drepper <drepper@redhat.com>2001-04-06 17:49:18 +0000
commite7f21fa6fbbad55ff2654e39732f54bf147cbfce (patch)
tree9797799d8e0cc2e33746ec176d611cac4571916e /iconv/gconv_db.c
parentee62473f2bd030dc42b601c06dae78e69b6cdaec (diff)
downloadglibc-e7f21fa6fbbad55ff2654e39732f54bf147cbfce.tar.gz
glibc-e7f21fa6fbbad55ff2654e39732f54bf147cbfce.tar.xz
glibc-e7f21fa6fbbad55ff2654e39732f54bf147cbfce.zip
Update.
2001-04-06  Ulrich Drepper  <drepper@redhat.com>

	* iconv/iconv_open.c: Move strip and upstr definitions...
	* iconv/gconv_charset.h: ...here.  New file.
	* iconv/gconv_db.c (once): Move to file level.
	(do_lookup_alias): Split out from __gconv_find_transform.
	(__gconv_find_transform): Call do_lookup_alias.
	(__gconv_loopup_alias): New function.
	* locale/langinfo.h: Define _NL_*_CODESET values for all categories
	but LC_CTYPE.
	* locale/categories.def: Add entries for new _NL_*_CODESET values.
	* locale/C-ctype.c: Use _nl_C_codeset to initialize CODESET entry.
	* locale/C-address.c: Initialize _NL_*_CODESET element.
	* locale/C-collate.c: Likewise.
	* locale/C-identification.c: Likewise.
	* locale/C-measurement.c: Likewise.
	* locale/C-messages.c: Likewise.
	* locale/C-monetary.c: Likewise.
	* locale/C-name.c: Likewise.
	* locale/C-numeric.c: Likewise.
	* locale/C-paper.c: Likewise.
	* locale/C-telephone.c: Likewise.
	* locale/C-time.c: Likewise.
	* locale/localeinfo.h: Declare _nl_C_codeset.
	* locale/C_name.c: Define _nl_C_codeset.
	* locale/findlocale.c: Before accepting locale check that the used
	charset does not conflict with what the locale name said.
	* locale/programs/ld-address.c: Emit codeset information.
	* locale/programs/ld-collate.c: Likewise.
	* locale/programs/ld-identification.c: Likewise.
	* locale/programs/ld-measurement.c: Likewise.
	* locale/programs/ld-messages.c: Likewise.
	* locale/programs/ld-monetary.c: Likewise.
	* locale/programs/ld-name.c: Likewise.
	* locale/programs/ld-numeric.c: Likewise.
	* locale/programs/ld-paper.c: Likewise.
	* locale/programs/ld-telephone.c: Likewise.
	* locale/programs/ld-time.c: Likewise.

	* localedata/tests-mbwc/tst_funcs.h (TST_HEAD_LOCALE): It is an error
	if the locale data couldn't be found.

	* string/Makefile: Define tst-strxfrm-ENV.

	* ysdeps/unix/sysv/linux/ia64/getcontext.S: Fix comment.
Diffstat (limited to 'iconv/gconv_db.c')
-rw-r--r--iconv/gconv_db.c39
1 files changed, 28 insertions, 11 deletions
diff --git a/iconv/gconv_db.c b/iconv/gconv_db.c
index c4ebc4f096..71d64b493e 100644
--- a/iconv/gconv_db.c
+++ b/iconv/gconv_db.c
@@ -614,13 +614,38 @@ find_derivation (const char *toset, const char *toset_expand,
 }
 
 
+/* Control of initialization.  */
+__libc_once_define (static, once);
+
+
+static const char *
+do_lookup_alias (const char *name)
+{
+  struct gconv_alias key;
+  struct gconv_alias **found;
+
+  key.fromname = (char *) name;
+  found = __tfind (&key, &__gconv_alias_db, __gconv_alias_compare);
+  return found != NULL ? (*found)->toname : NULL;
+}
+
+
+const char *
+__gconv_lookup_alias (const char *name)
+{
+  /* Ensure that the configuration data is read.  */
+  __libc_once (once, __gconv_read_conf);
+
+  return do_lookup_alias (name) ?: name;
+}
+
+
 int
 internal_function
 __gconv_find_transform (const char *toset, const char *fromset,
 			struct __gconv_step **handle, size_t *nsteps,
 			int flags)
 {
-  __libc_once_define (static, once);
   const char *fromset_expand = NULL;
   const char *toset_expand = NULL;
   int result;
@@ -641,16 +666,8 @@ __gconv_find_transform (const char *toset, const char *fromset,
   /* See whether the names are aliases.  */
   if (__gconv_alias_db != NULL)
     {
-      struct gconv_alias key;
-      struct gconv_alias **found;
-
-      key.fromname = (char *) fromset;
-      found = __tfind (&key, &__gconv_alias_db, __gconv_alias_compare);
-      fromset_expand = found != NULL ? (*found)->toname : NULL;
-
-      key.fromname = (char *) toset;
-      found = __tfind (&key, &__gconv_alias_db, __gconv_alias_compare);
-      toset_expand = found != NULL ? (*found)->toname : NULL;
+      fromset_expand = do_lookup_alias (fromset);
+      toset_expand = do_lookup_alias (toset);
     }
 
   if (__builtin_expect (flags & GCONV_AVOID_NOCONV, 0)