changeset 17086:ece5caebd75e

localcharset: work around Mac OS X bug with UTF-8 and MB_CUR_MAX * lib/localcharset.c (locale_charset) [DARWIN7]: Return "ASCII" if the system reports "UTF-8" and MB_CUR_MAX <= 1, as these two values are incompatible. Problem reported by Max Horn. For more discussion, please see <http://lists.gnu.org/archive/html/bug-gnulib/2012-09/msg00061.html>.
author Paul Eggert <eggert@cs.ucla.edu>
date Sun, 16 Sep 2012 10:47:43 -0700
parents 80904f782122
children ba92000376ad
files ChangeLog lib/localcharset.c
diffstat 2 files changed, 14 insertions(+), 0 deletions(-) [+]
line wrap: on
line diff
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,5 +1,12 @@
 2012-09-16  Paul Eggert  <eggert@cs.ucla.edu>
 
+	localcharset: work around Mac OS X bug with UTF-8 and MB_CUR_MAX
+	* lib/localcharset.c (locale_charset) [DARWIN7]:
+	Return "ASCII" if the system reports "UTF-8" and MB_CUR_MAX <= 1,
+	as these two values are incompatible.  Problem reported by Max Horn.
+	For more discussion, please see
+	<http://lists.gnu.org/archive/html/bug-gnulib/2012-09/msg00061.html>.
+
 	doc: document sticky-EOF issue
 	* doc/posix-functions/fgetc.texi (fgetc):
 	* doc/posix-functions/fgets.texi (fgets):
--- a/lib/localcharset.c
+++ b/lib/localcharset.c
@@ -542,5 +542,12 @@
   if (codeset[0] == '\0')
     codeset = "ASCII";
 
+#ifdef DARWIN7
+  /* Mac OS X sets MB_CUR_MAX to 1 when LC_ALL=C, and "UTF-8"
+     (the default codeset) does not work when MB_CUR_MAX is 1.  */
+  if (strcmp (codeset, "UTF-8") == 0 && MB_CUR_MAX <= 1)
+    codeset = "ASCII";
+#endif
+
   return codeset;
 }