localcharset: work around Mac OS X bug with UTF-8 and MB_CUR_MAX
authorPaul Eggert <eggert@cs.ucla.edu>
Sun, 16 Sep 2012 17:47:43 +0000 (10:47 -0700)
committerPaul Eggert <eggert@cs.ucla.edu>
Sun, 16 Sep 2012 17:48:04 +0000 (10:48 -0700)
* 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>.

ChangeLog
lib/localcharset.c

index 268292b..5425df4 100644 (file)
--- 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):
index 54a2432..1a94042 100644 (file)
@@ -542,5 +542,12 @@ locale_charset (void)
   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;
 }