mirror of
https://github.com/mruby/mruby
synced 2026-06-08 16:11:16 +00:00
Remove code duplication in mrb_str_concat.
This commit is contained in:
+1
-19
@@ -733,28 +733,10 @@ mrb_str_to_cstr(mrb_state *mrb, mrb_value str0)
|
||||
MRB_API void
|
||||
mrb_str_concat(mrb_state *mrb, mrb_value self, mrb_value other)
|
||||
{
|
||||
struct RString *s1 = mrb_str_ptr(self), *s2;
|
||||
mrb_int len;
|
||||
|
||||
mrb_str_modify(mrb, s1);
|
||||
if (!mrb_string_p(other)) {
|
||||
other = mrb_str_to_str(mrb, other);
|
||||
}
|
||||
s2 = mrb_str_ptr(other);
|
||||
if (RSTR_LEN(s2) == 0) {
|
||||
return;
|
||||
}
|
||||
len = RSTR_LEN(s1) + RSTR_LEN(s2);
|
||||
|
||||
if (len < 0 || len >= MRB_INT_MAX) {
|
||||
mrb_raise(mrb, E_ARGUMENT_ERROR, "string size too big");
|
||||
}
|
||||
if (RSTRING_CAPA(self) < len) {
|
||||
resize_capa(mrb, s1, len);
|
||||
}
|
||||
memcpy(RSTR_PTR(s1)+RSTR_LEN(s1), RSTR_PTR(s2), RSTR_LEN(s2));
|
||||
RSTR_SET_LEN(s1, len);
|
||||
RSTR_PTR(s1)[len] = '\0';
|
||||
mrb_str_cat_str(mrb, self, other);
|
||||
}
|
||||
|
||||
/*
|
||||
|
||||
Reference in New Issue
Block a user