diff options
author | Ulrich Drepper <drepper@redhat.com> | 2001-04-06 17:49:18 +0000 |
---|---|---|
committer | Ulrich Drepper <drepper@redhat.com> | 2001-04-06 17:49:18 +0000 |
commit | e7f21fa6fbbad55ff2654e39732f54bf147cbfce (patch) | |
tree | 9797799d8e0cc2e33746ec176d611cac4571916e /iconv/gconv_db.c | |
parent | ee62473f2bd030dc42b601c06dae78e69b6cdaec (diff) | |
download | glibc-e7f21fa6fbbad55ff2654e39732f54bf147cbfce.zip glibc-e7f21fa6fbbad55ff2654e39732f54bf147cbfce.tar.gz glibc-e7f21fa6fbbad55ff2654e39732f54bf147cbfce.tar.bz2 |
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.c | 39 |
1 files changed, 28 insertions, 11 deletions
diff --git a/iconv/gconv_db.c b/iconv/gconv_db.c index c4ebc4f..71d64b4 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) |