diff options
Diffstat (limited to 'libguile/strop.c')
-rw-r--r-- | libguile/strop.c | 21 |
1 files changed, 7 insertions, 14 deletions
diff --git a/libguile/strop.c b/libguile/strop.c index ae83f2e24..415fd5068 100644 --- a/libguile/strop.c +++ b/libguile/strop.c @@ -165,19 +165,14 @@ SCM_DEFINE (scm_substring_move_x, "substring-move!", 5, 0, 0, "@var{str1} and @var{str2} can be the same string.") #define FUNC_NAME s_scm_substring_move_x { - long s1, s2, e, len; + unsigned long s1, s2, e, len; SCM_VALIDATE_STRING (1, str1); - SCM_VALIDATE_INUM_COPY (2, start1, s1); - SCM_VALIDATE_INUM_COPY (3, end1, e); SCM_VALIDATE_STRING (4, str2); - SCM_VALIDATE_INUM_COPY (5, start2, s2); + s1 = scm_to_unsigned_integer (start1, 0, SCM_STRING_LENGTH(str1)); + e = scm_to_unsigned_integer (end1, s1, SCM_STRING_LENGTH(str1)); len = e - s1; - SCM_ASSERT_RANGE (3, end1, len >= 0); - SCM_ASSERT_RANGE (2, start1, s1 <= SCM_STRING_LENGTH (str1) && s1 >= 0); - SCM_ASSERT_RANGE (5, start2, s2 <= SCM_STRING_LENGTH (str2) && s2 >= 0); - SCM_ASSERT_RANGE (3, end1, e <= SCM_STRING_LENGTH (str1) && e >= 0); - SCM_ASSERT_RANGE (5, start2, len+s2 <= SCM_STRING_LENGTH (str2)); + s2 = scm_to_unsigned_integer (start2, 0, SCM_STRING_LENGTH(str2)-len); SCM_SYSCALL(memmove((void *)(&(SCM_STRING_CHARS(str2)[s2])), (void *)(&(SCM_STRING_CHARS(str1)[s1])), @@ -201,14 +196,12 @@ SCM_DEFINE (scm_substring_fill_x, "substring-fill!", 4, 0, 0, "@end lisp") #define FUNC_NAME s_scm_substring_fill_x { - long i, e; + size_t i, e; char c; SCM_VALIDATE_STRING (1, str); - SCM_VALIDATE_INUM_COPY (2, start, i); - SCM_VALIDATE_INUM_COPY (3, end, e); + i = scm_to_unsigned_integer (start, 0, SCM_STRING_LENGTH (str)); + e = scm_to_unsigned_integer (end, i, SCM_STRING_LENGTH (str)); SCM_VALIDATE_CHAR_COPY (4, fill, c); - SCM_ASSERT_RANGE (2, start, i <= SCM_STRING_LENGTH (str) && i >= 0); - SCM_ASSERT_RANGE (3, end, e <= SCM_STRING_LENGTH (str) && e >= 0); while (i<e) SCM_STRING_CHARS (str)[i++] = c; return SCM_UNSPECIFIED; } |