summaryrefslogtreecommitdiff
path: root/src/shell_manager.cc
diff options
context:
space:
mode:
authorMaxime Coste <frrrwww@gmail.com>2015-09-03 13:21:35 +0100
committerMaxime Coste <frrrwww@gmail.com>2015-09-03 13:21:35 +0100
commite69db0f671a6f7cdbc10fe3e7099f0c2fc4aa211 (patch)
tree16779c28897cac052494a6f668315de823bc9549 /src/shell_manager.cc
parentea7f76f7f27bd5fd461224b15c3eea9c7ce350f3 (diff)
Regex are overkill for shell manager env vars, we just need exact match or prefix match
Diffstat (limited to 'src/shell_manager.cc')
-rw-r--r--src/shell_manager.cc12
1 files changed, 7 insertions, 5 deletions
diff --git a/src/shell_manager.cc b/src/shell_manager.cc
index 8aacee35..19d55bb3 100644
--- a/src/shell_manager.cc
+++ b/src/shell_manager.cc
@@ -135,22 +135,24 @@ std::pair<String, int> ShellManager::eval(
return {};
}
-void ShellManager::register_env_var(StringView regex,
+void ShellManager::register_env_var(StringView str, bool prefix,
EnvVarRetriever retriever)
{
- m_env_vars.push_back({ Regex{regex}, std::move(retriever) });
+ m_env_vars.push_back({ str.str(), prefix, std::move(retriever) });
}
String ShellManager::get_val(StringView name, const Context& context) const
{
auto env_var = std::find_if(
m_env_vars.begin(), m_env_vars.end(),
- [name](const std::pair<Regex, EnvVarRetriever>& pair)
- { return regex_match(name.begin(), name.end(), pair.first); });
+ [name](const EnvVarDesc& desc) {
+ return desc.prefix ? prefix_match(name, desc.str) : name == desc.str;
+ });
if (env_var == m_env_vars.end())
throw runtime_error("no such env var: " + name);
- return env_var->second(name, context);
+
+ return env_var->func(name, context);
}
}