From: Pádraig Brady <P@draigBrady.com>
Date: Tue, 19 Nov 2024 18:11:21 +0000 (+0000)
Subject: unicodeio: avoid iconv issues for most ASCII characters
X-Git-Url: https://gitweb.git.savannah.gnu.org/gitweb/?a=commitdiff_plain;h=8500cca21c04fb2ae24f27af4f3d270040e511b0;p=gnulib.git

unicodeio: avoid iconv issues for most ASCII characters

* lib/unicodeio.c (print_unicode_char): Avoid unicode_to_mb()
for most ASCII characters, to avoid iconv() issues
which were seen on macOS.
Addresses https://bugs.gnu.org/74428
---

diff --git a/ChangeLog b/ChangeLog
index 562628d22b..56a3a07ff9 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,11 @@
+2024-11-19  Pádraig Brady  <P@draigBrady.com>
+
+	unicodeio: avoid iconv issues for most ASCII characters
+	* lib/unicodeio.c (print_unicode_char): Avoid unicode_to_mb()
+	for mose ASCII characters, to avoid iconv() issues
+	which were seen on macOS.
+	Addresses https://bugs.gnu.org/74428
+
 2024-11-19  Bruno Haible  <bruno@clisp.org>
 
 	stdlib: Adjust warning about function 'free'.
diff --git a/lib/unicodeio.c b/lib/unicodeio.c
index 9ed3875f93..b3321bb918 100644
--- a/lib/unicodeio.c
+++ b/lib/unicodeio.c
@@ -224,9 +224,17 @@ fallback_failure_callback (unsigned int code,
 void
 print_unicode_char (FILE *stream, unsigned int code, int exit_on_error)
 {
-  unicode_to_mb (code, fwrite_success_callback,
-                 exit_on_error
-                 ? exit_failure_callback
-                 : fallback_failure_callback,
-                 stream);
+  /* Simplify this subset to avoid potential iconv() issues
+     for that range at least.  */
+  if (32 <= code && code < 128)
+    {
+      char code_char = code;
+      fwrite_success_callback (&code_char, sizeof code_char, stream);
+    }
+  else
+    unicode_to_mb (code, fwrite_success_callback,
+                   exit_on_error
+                   ? exit_failure_callback
+                   : fallback_failure_callback,
+                   stream);
 }