string.c: simplify memcmp guard with ternary operator

refactored the NULL pointer guard in mrb_str_cmp() from an if-else
block to a more concise ternary operator. functionality remains the
same: avoids undefined behavior by skipping memcmp() when comparing
zero-length strings.

Co-authored-by: Claude <noreply@anthropic.com>
This commit is contained in:
Yukihiro "Matz" Matsumoto
2025-11-23 23:11:36 +09:00
parent 6122fdfee9
commit 78f9b5c52f
+1 -9
View File
@@ -1200,15 +1200,7 @@ mrb_str_cmp(mrb_state *mrb, mrb_value str1, mrb_value str2)
mrb_int len1 = RSTR_LEN(s1);
mrb_int len2 = RSTR_LEN(s2);
mrb_int len = lesser(len1, len2);
mrb_int retval;
/* avoid UB: memcmp requires non-NULL pointers even when size is 0 */
if (len == 0) {
retval = 0;
}
else {
retval = memcmp(RSTR_PTR(s1), RSTR_PTR(s2), len);
}
mrb_int retval = (len == 0) ? 0 : memcmp(RSTR_PTR(s1), RSTR_PTR(s2), len);
if (retval == 0) {
if (len1 == len2) return 0;