From 40371ebf01f3eab89d4bbf927bdbdf1559dd085f Mon Sep 17 00:00:00 2001 From: dearblue Date: Sun, 20 Jul 2025 21:29:44 +0900 Subject: [PATCH] Generate the string object last at the end of processing This is simpler than processing `suffix` after the string object has been created. --- mrbgems/mruby-io/src/file.c | 10 ++++------ 1 file changed, 4 insertions(+), 6 deletions(-) diff --git a/mrbgems/mruby-io/src/file.c b/mrbgems/mruby-io/src/file.c index e842c482f..97990b37a 100644 --- a/mrbgems/mruby-io/src/file.c +++ b/mrbgems/mruby-io/src/file.c @@ -283,18 +283,16 @@ mrb_file_basename(mrb_state *mrb, mrb_value klass) return mrb_str_new_lit(mrb, "/"); } - mrb_value result = mrb_str_new(mrb, base, endp - base); - // Suffix removal (CRuby compatible) if (suffix && *suffix) { - mrb_int blen = RSTRING_LEN(result); + mrb_int blen = endp - base; mrb_int slen = strlen(suffix); - if (blen > slen && memcmp(RSTRING_PTR(result) + blen - slen, suffix, slen) == 0) { - mrb_str_resize(mrb, result, blen - slen); + if (blen > slen && memcmp(endp - slen, suffix, slen) == 0) { + endp -= slen; } } - return result; + return mrb_str_new(mrb, base, endp - base); } static mrb_value