summary refs log tree commit diff
path: root/wcsmbs/wcsmbsload.c
diff options
context:
space:
mode:
authorUlrich Drepper <drepper@redhat.com>2000-06-16 23:04:41 +0000
committerUlrich Drepper <drepper@redhat.com>2000-06-16 23:04:41 +0000
commit323fb88dac799cddfaa33cb80f7fc3395c2297e5 (patch)
treef853cfdf9b5bcde5a90324bb2115b225bb405ebd /wcsmbs/wcsmbsload.c
parentf1d5c60ddef851078544e6b8456b18534b9a2a95 (diff)
downloadglibc-323fb88dac799cddfaa33cb80f7fc3395c2297e5.tar.gz
glibc-323fb88dac799cddfaa33cb80f7fc3395c2297e5.tar.xz
glibc-323fb88dac799cddfaa33cb80f7fc3395c2297e5.zip
Update.
2000-06-16  Ulrich Drepper  <drepper@redhat.com>

	* iconv/gconv_int.h (norm_add_slashes): Optionally add given suffix.
	* iconv/gconv_open.c: Remove error handling specification from `from'
	character set name.
	* intl/loadmsgcat.c (_nl_load_domain): Call norm_add_slashes with
	new parameter to always enable transliteration.
	* locale/localeinfo.h (LIMAGIC): Bump number because of incompatible
	change.
	(struct locale_data): Add new members use_translit and options.
	* locale/findlocale.c (_nl_find_locale): Set use_translit flag is
	character set name contained modifier TRANSLIT.
	* locale/loadlocale.c (_nl_load_locale): Initialize new use_translit
	and options fields.
	(_nl_unload_locale): Free options string if necessary.
	* wcsmbs/wcsmbsload.c (__wcsmbs_load_conv): Enable translation if
	the locale names suggested this.
	* locale/C-address.c: Add two new initialilzers to adjust data
	structure for new format.
	* locale/C-collate.c: Likewise.
	* locale/C-ctype.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/setlocale.c: Add some more __builtin_expect.
Diffstat (limited to 'wcsmbs/wcsmbsload.c')
-rw-r--r--wcsmbs/wcsmbsload.c12
1 files changed, 10 insertions, 2 deletions
diff --git a/wcsmbs/wcsmbsload.c b/wcsmbs/wcsmbsload.c
index 55d19ff0cf..b152b3541c 100644
--- a/wcsmbs/wcsmbsload.c
+++ b/wcsmbs/wcsmbsload.c
@@ -146,7 +146,7 @@ __wcsmbs_load_conv (const struct locale_data *new_category)
 
   /* We should repeat the test since while we waited some other thread
      might have run this function.  */
-  if (__wcsmbs_last_locale != new_category)
+  if (__builtin_expect (__wcsmbs_last_locale != new_category, 1))
     {
       if (new_category->name == _nl_C_name)	/* Yes, pointer comparison.  */
 	{
@@ -161,6 +161,7 @@ __wcsmbs_load_conv (const struct locale_data *new_category)
 	  const char *complete_name;
 	  struct __gconv_step *new_towc;
 	  struct __gconv_step *new_tomb;
+	  int use_translit;
 
 	  /* Free the old conversions.  */
 	  __gconv_close_transform (__wcsmbs_gconv_fcts.tomb, 1);
@@ -169,10 +170,17 @@ __wcsmbs_load_conv (const struct locale_data *new_category)
 	  /* Get name of charset of the locale.  */
 	  charset_name = new_category->values[_NL_ITEM_INDEX(CODESET)].string;
 
+	  /* Does the user want transliteration?  */
+	  use_translit = new_category->use_translit;
+
 	  /* Normalize the name and add the slashes necessary for a
              complete lookup.  */
-	  complete_name = norm_add_slashes (charset_name);
+	  complete_name = norm_add_slashes (charset_name,
+					    use_translit ? "TRANSLIT" : NULL);
 
+	  /* It is not necessary to use transliteration in this direction
+	     since the internal character set is supposed to be able to
+	     represent all others.  */
 	  new_towc = getfct ("INTERNAL", complete_name);
 	  if (new_towc != NULL)
 	    new_tomb = getfct (complete_name, "INTERNAL");