$ git diff runtime.c diff --git a/runtime.c b/runtime.c index 2673d81..7186f93 100644 --- a/runtime.c +++ b/runtime.c @@ -4392,7 +4392,7 @@ C_regparm C_word C_fcall C_i_string_equal_p(C_word x, C_word y) C_regparm C_word C_fcall C_i_string_ci_equal_p(C_word x, C_word y) { - C_word n; + C_word nx, ny; char *p1, *p2; if(C_immediatep(x) || C_header_bits(x) != C_STRING_TYPE) @@ -4401,14 +4401,18 @@ C_regparm C_word C_fcall C_i_string_ci_equal_p(C_word x, C_word y) if(C_immediatep(y) || C_header_bits(y) != C_STRING_TYPE) barf(C_BAD_ARGUMENT_TYPE_ERROR, "string-ci=?", y); - n = C_header_size(x); + nx = C_header_size(x); + ny = C_header_size(y); - if(n != C_header_size(y)) return C_SCHEME_FALSE; + if(nx != ny) return C_SCHEME_FALSE; + + if(C_memcmp((char *)C_data_pointer(x), (char *)C_data_pointer(y), nx)) + return C_SCHEME_TRUE; p1 = (char *)C_data_pointer(x); p2 = (char *)C_data_pointer(y); - while(n--) { + while(nx--) { if(C_tolower((int)(*(p1++))) != C_tolower((int)(*(p2++)))) return C_SCHEME_FALSE; }