X-Git-Url: http://git.hcoop.net/bpt/guile.git/blobdiff_plain/78f0ef20a77dd745a8fa4c1ac1fae4d42b481adf..dc7da0be90d6033d512f9772894179970af678e7:/libguile/strings.c diff --git a/libguile/strings.c b/libguile/strings.c index b43ccaba2..d3c8e155c 100644 --- a/libguile/strings.c +++ b/libguile/strings.c @@ -240,7 +240,7 @@ scm_i_pthread_mutex_t stringbuf_write_mutex = SCM_I_PTHREAD_MUTEX_INITIALIZER; #define SET_STRING_STRINGBUF(str,buf) (SCM_SET_CELL_OBJECT_1(str,buf)) #define SET_STRING_START(str,start) (SCM_SET_CELL_WORD_2(str,start)) -#define IS_STRING(str) (SCM_NIMP(str) && SCM_TYP7(str) == STRING_TAG) +#define IS_STRING(str) (SCM_HAS_TYP7 (str, STRING_TAG)) /* Read-only strings. */ @@ -1489,7 +1489,7 @@ scm_from_stringn (const char *str, size_t len, const char *encoding, buf = scm_gc_malloc_pointerless (len, "bytevector"); memcpy (buf, str, len); - bv = scm_c_take_bytevector (buf, len, SCM_BOOL_F); + bv = scm_c_take_gc_bytevector (buf, len, SCM_BOOL_F); scm_decoding_error (__func__, errno, "input locale conversion error", bv); @@ -1779,14 +1779,16 @@ scm_to_latin1_stringn (SCM str, size_t *lenp) if (scm_i_is_narrow_string (str)) { + size_t len = scm_i_string_length (str); + if (lenp) - *lenp = scm_i_string_length (str); + *lenp = len; - result = scm_strdup (scm_i_string_data (str)); + result = scm_strndup (scm_i_string_data (str), len); } else result = scm_to_stringn (str, lenp, NULL, - SCM_FAILED_CONVERSION_ERROR); + SCM_FAILED_CONVERSION_ERROR); return result; }