summary refs log tree commit diff
path: root/intl/loadmsgcat.c
diff options
context:
space:
mode:
authorUlrich Drepper <drepper@redhat.com>1999-08-22 22:39:16 +0000
committerUlrich Drepper <drepper@redhat.com>1999-08-22 22:39:16 +0000
commitc90a2db6e0c4661091a9c5b1454a9beffc611e9e (patch)
tree22fd71bef937c16b2468c25649c71b77940908a4 /intl/loadmsgcat.c
parent60c53a1219b9f0ee9c1787f2b160b362e7f94457 (diff)
downloadglibc-c90a2db6e0c4661091a9c5b1454a9beffc611e9e.tar.gz
glibc-c90a2db6e0c4661091a9c5b1454a9beffc611e9e.tar.xz
glibc-c90a2db6e0c4661091a9c5b1454a9beffc611e9e.zip
Update.
1999-08-22  Ulrich Drepper  <drepper@cygnus.com>

	* iconv/gconv_int.h (GCONV_AVOID_NOCONV): New definition.
	(__gconv_find_transform): Update prototype.
	(__gconv_open): Likewise.
	* iconv/gconv_open.c: Take extra parameter and pass it to
	__gconv_find_transform.
	* iconv/gconv_db.c (__gconv_find_transform): Take extra parameter with
	flags.  If GCONV_AVOID_NOCONV flag is set don't return copying
	transformation.
	* iconv/iconv_open.c: Pass extra parameter to __gconv_open.
	* wcsmbs/wcsmbsload.c: Likewise.
	* intl/dcgettext.c (_nl_find_msg): Rewrite to use gconv instead of
	iconv for glibc.
	* intl/gettextP.h: Likewise.
	* intl/loadmsgcat.c: Likewise.

	* posix/regexbug1.c: New file.
	* posix/Makefile (tests): Add regexbug1.
Diffstat (limited to 'intl/loadmsgcat.c')
-rw-r--r--intl/loadmsgcat.c25
1 files changed, 22 insertions, 3 deletions
diff --git a/intl/loadmsgcat.c b/intl/loadmsgcat.c
index 23d738882b..ba818ce3b1 100644
--- a/intl/loadmsgcat.c
+++ b/intl/loadmsgcat.c
@@ -223,8 +223,12 @@ _nl_load_domain (domain_file)
      entry does not exist or if this does not contain the `charset='
      information, we will assume the charset matches the one the
      current locale and we don't have to perform any conversion.  */
-#if HAVE_ICONV || defined _LIBC
+#ifdef _LIBC
+  domain->conv = (__gconv_t) -1;
+#else
+# if HAVE_ICONV
   domain->conv = (iconv_t) -1;
+# endif
 #endif
   nullentry = _nl_find_msg (domain_file, "");
   if (nullentry != NULL)
@@ -235,6 +239,7 @@ _nl_load_domain (domain_file)
 	{
 	  size_t len;
 	  char *charset;
+	  const char *outcharset;
 
 	  charsetstr += strlen ("charset=");
 	  len = strcspn (charsetstr, " \t\n");
@@ -247,8 +252,22 @@ _nl_load_domain (domain_file)
 	  charset[len] = '\0';
 #endif
 
-#if HAVE_ICONV || defined _LIBC
-	  domain->conv = iconv_open ((*_nl_current[LC_CTYPE])->values[_NL_ITEM_INDEX (CODESET)].string, charset);
+	  /* The output charset should normally be determined by the
+	     locale.  But sometimes the locale is not used or not correctly
+	     set up so we provide a possibility to override this.  */
+	  outcharset = getenv ("OUTPUT_CHARSET");
+	  if (outcharset == NULL || outcharset[0] == '\0')
+	    outcharset = (*_nl_current[LC_CTYPE])->values[_NL_ITEM_INDEX (CODESET)].string;
+
+#ifdef _LIBC
+	  if (__gconv_open (outcharset, charset, &domain->conv,
+			    GCONV_AVOID_NOCONV)
+	      != __GCONV_OK)
+	    domain->conv = (__gconv_t) -1;
+#else
+# if HAVE_ICONV
+	  domain->conv = iconv_open (outcharset, charset);
+# endif
 #endif
 	}
     }