From 0d2e13bcb8f25ab3ace44163eb82a5589ab87aa1 Mon Sep 17 00:00:00 2001 From: Lukas Tenbrink Date: Wed, 4 Dec 2024 17:50:40 +0100 Subject: [PATCH] Optimize is_valid_filename and validate_filename by caching invalid filename characters, instead of re-splitting each call. --- core/string/ustring.cpp | 10 ++++------ 1 file changed, 4 insertions(+), 6 deletions(-) diff --git a/core/string/ustring.cpp b/core/string/ustring.cpp index 0e553a5680b..b598326c4b7 100644 --- a/core/string/ustring.cpp +++ b/core/string/ustring.cpp @@ -5286,7 +5286,7 @@ bool String::is_valid_html_color() const { } // Changes made to the set of invalid filename characters must also be reflected in the String documentation for is_valid_filename. -static const char *invalid_filename_characters = ": / \\ ? * \" | % < >"; +static const char *invalid_filename_characters[] = { ":", "/", "\\", "?", "*", "\"", "|", "%", "<", ">" }; bool String::is_valid_filename() const { String stripped = strip_edges(); @@ -5298,8 +5298,7 @@ bool String::is_valid_filename() const { return false; } - Vector chars = String(invalid_filename_characters).split(" "); - for (const String &ch : chars) { + for (const char *ch : invalid_filename_characters) { if (contains(ch)) { return false; } @@ -5308,10 +5307,9 @@ bool String::is_valid_filename() const { } String String::validate_filename() const { - Vector chars = String(invalid_filename_characters).split(" "); String name = strip_edges(); - for (int i = 0; i < chars.size(); i++) { - name = name.replace(chars[i], "_"); + for (const char *ch : invalid_filename_characters) { + name = name.replace(ch, "_"); } return name; }