mike121 pushed a commit to branch wip-mingw-2025
in repository guile.

commit dee2ac91df72a21c703ab17ba72e69792a140a1d
Author: Michael Gran <spk...@yahoo.com>
AuthorDate: Sun Oct 8 17:55:45 2023 -0700

    Special case the CPUTF-8 encoding in scm_to_stringn scm_from_stringn
---
 libguile/strings.c | 13 +++++++++++++
 1 file changed, 13 insertions(+)

diff --git a/libguile/strings.c b/libguile/strings.c
index 27cafebc4..b31b86173 100644
--- a/libguile/strings.c
+++ b/libguile/strings.c
@@ -1523,6 +1523,12 @@ scm_from_stringn (const char *str, size_t len, const 
char *encoding,
 
   if (c_strcasecmp (encoding, "ISO-8859-1") == 0 || len == 0)
     return scm_from_latin1_stringn (str, len);
+#ifdef _WIN32
+  // This is a workaround for code pages unhandled by gnulib's
+  // locale_charset().
+  else if (c_strcasecmp (encoding, "CPUTF-8") == 0)
+    return scm_from_stringn (str, len, "UTF-8", handler);
+#endif
   else if (c_strcasecmp (encoding, "UTF-8") == 0
            && handler == SCM_FAILED_CONVERSION_ERROR)
     return scm_from_utf8_stringn (str, len);
@@ -2200,6 +2206,13 @@ scm_to_stringn (SCM str, size_t *lenp, const char 
*encoding,
   if (encoding == NULL)
     encoding = "ISO-8859-1";
 
+#ifdef _WIN32
+  // This is a workaround for code pages unhandled by gnulib's
+  // locale_charset().
+  if (c_strcasecmp (encoding, "CPUTF-8") == 0)
+    return scm_to_stringn (str, lenp, "UTF-8", handler);
+#endif
+
   if (c_strcasecmp (encoding, "UTF-8") == 0)
     /* This is the most common case--e.g., when calling libc bindings
        while using a UTF-8 locale.  */

Reply via email to