From 29da36e4ab35b90e2bef391d1963d19003d3028d Mon Sep 17 00:00:00 2001 From: Kevin Ryde Date: Fri, 6 Aug 2004 00:47:24 +0000 Subject: [PATCH] (scm_uniform_vector_ref): For byvect, force signed char so as not to depend on C char signedness. (scm_array_set_x): For byvect, add range check, per array-fill!. --- libguile/unif.c | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/libguile/unif.c b/libguile/unif.c index 4eeb51e49..4449a6397 100644 --- a/libguile/unif.c +++ b/libguile/unif.c @@ -1163,7 +1163,7 @@ SCM_DEFINE (scm_uniform_vector_ref, "uniform-vector-ref", 2, 0, 0, case scm_tc7_string: return SCM_MAKE_CHAR (SCM_STRING_UCHARS (v)[pos]); case scm_tc7_byvect: - return SCM_MAKINUM (((char *) SCM_UVECTOR_BASE (v))[pos]); + return SCM_MAKINUM (((signed char *) SCM_UVECTOR_BASE (v))[pos]); case scm_tc7_uvect: return scm_ulong2num (((unsigned long *) SCM_VELTS (v))[pos]); case scm_tc7_ivect: @@ -1326,8 +1326,10 @@ SCM_DEFINE (scm_array_set_x, "array-set!", 2, 0, 1, break; case scm_tc7_byvect: if (SCM_CHARP (obj)) - obj = SCM_MAKINUM ((char) SCM_CHAR (obj)); + obj = SCM_MAKINUM ((signed char) SCM_CHAR (obj)); SCM_ASRTGO (SCM_INUMP (obj), badobj); + SCM_ASSERT_RANGE (SCM_ARG2, obj, + -128 <= SCM_INUM (obj) && SCM_INUM (obj) < 128); ((char *) SCM_UVECTOR_BASE (v))[pos] = SCM_INUM (obj); break; case scm_tc7_uvect: