From ee15bc2a36052343a860100ac6497c3afed8e6be Mon Sep 17 00:00:00 2001 From: ridiculousfish Date: Sat, 13 Feb 2021 18:47:50 -0800 Subject: [PATCH] Add a variant of valid_var_name which accepts const wchar_t * This avoids creating some unnecessary strings. --- src/common.cpp | 10 +++++++++- src/common.h | 1 + 2 files changed, 10 insertions(+), 1 deletion(-) diff --git a/src/common.cpp b/src/common.cpp index 458838181..7dbebfa36 100644 --- a/src/common.cpp +++ b/src/common.cpp @@ -1875,7 +1875,15 @@ bool valid_var_name_char(wchar_t chr) { return fish_iswalnum(chr) || chr == L'_' /// Test if the given string is a valid variable name. bool valid_var_name(const wcstring &str) { - return std::find_if_not(str.begin(), str.end(), valid_var_name_char) == str.end(); + // Note do not use c_str(), we want to fail on embedded nul bytes. + return std::all_of(str.begin(), str.end(), valid_var_name_char); +} + +bool valid_var_name(const wchar_t *str) { + for (size_t i = 0; str[i] != L'\0'; i++) { + if (!valid_var_name_char(str[i])) return false; + } + return true; } /// Test if the string is a valid function name. diff --git a/src/common.h b/src/common.h index 0a8728e78..13b05792e 100644 --- a/src/common.h +++ b/src/common.h @@ -638,6 +638,7 @@ std::string get_path_to_tmp_dir(); bool valid_var_name_char(wchar_t chr); bool valid_var_name(const wcstring &str); +bool valid_var_name(const wchar_t *str); bool valid_func_name(const wcstring &str); // Return values (`$status` values for fish scripts) for various situations.