Backported the string improvements from pandemonium.

This commit is contained in:
Relintai 2023-12-24 12:41:52 +01:00
parent 6863d80ea9
commit 3d04ef9d1e

View File

@ -905,7 +905,7 @@ String String::substr(int p_from, int p_chars) const {
String String::substr_index(const int start_index, const int end_index) const { String String::substr_index(const int start_index, const int end_index) const {
int s = length(); int s = length();
if (start_index < 0 || start_index >= s || end_index < 0 || start_index >= s) { if (start_index < 0 || start_index >= s || end_index < 0) {
return ""; return "";
} }
@ -913,6 +913,10 @@ String String::substr_index(const int start_index, const int end_index) const {
return ""; return "";
} }
if (end_index >= s) {
return substr(start_index, (s - 1) - start_index);
}
return substr(start_index, end_index - start_index); return substr(start_index, end_index - start_index);
} }
@ -4059,8 +4063,17 @@ String String::path_clean_end_slash() const {
String ret = *this; String ret = *this;
while (ret.length() > 1 && (ret.ends_with("/") || ret.ends_with("\\"))) { int strip_to = ret.length() - 1;
ret.resize(ret.length());
CharType c = ret[strip_to];
while (strip_to > 1 && (c == '/' || c == '\\')) {
--strip_to;
c = ret[strip_to];
}
if (ret.length() != strip_to + 1) {
ret.set_length(strip_to + 1);
} }
return ret; return ret;