diff --git a/vlib/builtin/string.v b/vlib/builtin/string.v index 7c4450313f..f47330bd00 100644 --- a/vlib/builtin/string.v +++ b/vlib/builtin/string.v @@ -1051,12 +1051,8 @@ pub fn (s string) substr(start int, end int) string { str: unsafe { malloc_noscan(len + 1) } len: len } - for i in 0 .. len { - unsafe { - res.str[i] = s.str[start + i] - } - } unsafe { + vmemcpy(res.str, s.str + start, len) res.str[len] = 0 } return res @@ -1077,12 +1073,8 @@ pub fn (s string) substr_with_check(start int, end int) !string { str: unsafe { malloc_noscan(len + 1) } len: len } - for i in 0 .. len { - unsafe { - res.str[i] = s.str[start + i] - } - } unsafe { + vmemcpy(res.str, s.str + start, len) res.str[len] = 0 } return res @@ -1114,14 +1106,7 @@ pub fn (s string) substr_ni(_start int, _end int) string { } if start > s.len || end < start { - mut res := string{ - str: unsafe { malloc_noscan(1) } - len: 0 - } - unsafe { - res.str[0] = 0 - } - return res + return '' } len := end - start @@ -1131,12 +1116,8 @@ pub fn (s string) substr_ni(_start int, _end int) string { str: unsafe { malloc_noscan(len + 1) } len: len } - for i in 0 .. len { - unsafe { - res.str[i] = s.str[start + i] - } - } unsafe { + vmemcpy(res.str, s.str + start, len) res.str[len] = 0 } return res