summaryrefslogtreecommitdiff
path: root/libguile/strings.c
diff options
context:
space:
mode:
authorMichael Gran <spk121@yahoo.com>2009-08-30 15:41:56 -0700
committerMichael Gran <spk121@yahoo.com>2009-08-30 16:54:49 -0700
commitfac32b518ef9f456e8f6465c00e6c6f40a1123a8 (patch)
treeade50d4935f7e3cc6143ac13d32f91ff2ad5c233 /libguile/strings.c
parentf84c500d2e29c619e6a989d0d11911fea414d795 (diff)
downloadguile-fac32b518ef9f456e8f6465c00e6c6f40a1123a8.tar.gz
Fix encoding errors with strings returned by string ports
String ports, being 8-bit, store strings using the character encoding of the port. This fixes a bug where the default character encoding, and not the port's encoding, was being used to convert the string port data back to a string. * libguile/strports.c: extra comments (scm_strport_to_string): use port's encoding when converting port data to a string * libguile/strings.c (scm_i_from_stringn): renamed from scm_from_stringn and made internal. All callers changed. (scm_from_stringn): renamed to scm_i_from_stringn. * libguile/strings.h: declaration for scm_i_from_stringn
Diffstat (limited to 'libguile/strings.c')
-rw-r--r--libguile/strings.c15
1 files changed, 9 insertions, 6 deletions
diff --git a/libguile/strings.c b/libguile/strings.c
index 4a8390d16..3b8d15db0 100644
--- a/libguile/strings.c
+++ b/libguile/strings.c
@@ -1477,15 +1477,18 @@ scm_is_string (SCM obj)
return IS_STRING (obj);
}
-static SCM
-scm_from_stringn (const char *str, size_t len, const char *encoding,
- scm_t_string_failed_conversion_handler handler)
+SCM
+scm_i_from_stringn (const char *str, size_t len, const char *encoding,
+ scm_t_string_failed_conversion_handler handler)
{
size_t u32len, i;
scm_t_wchar *u32;
int wide = 0;
SCM res;
+ if (len == 0)
+ return scm_nullstr;
+
if (encoding == NULL)
{
/* If encoding is null, use Latin-1. */
@@ -1575,7 +1578,7 @@ scm_from_locale_stringn (const char *str, size_t len)
hndl = SCM_FAILED_CONVERSION_ERROR;
}
- return scm_from_stringn (str, len, enc, hndl);
+ return scm_i_from_stringn (str, len, enc, hndl);
}
SCM
@@ -1590,7 +1593,7 @@ scm_from_locale_string (const char *str)
SCM
scm_i_from_utf8_string (const scm_t_uint8 *str)
{
- return scm_from_stringn ((const char *) str,
+ return scm_i_from_stringn ((const char *) str,
strlen ((char *) str), "UTF-8",
SCM_FAILED_CONVERSION_ERROR);
}
@@ -1681,7 +1684,7 @@ unistring_escapes_to_guile_escapes (char **bufp, size_t *lenp)
}
char *
-scm_to_locale_stringn (SCM str, size_t * lenp)
+scm_to_locale_stringn (SCM str, size_t *lenp)
{
SCM outport;
scm_t_port *pt;