From e69db0f671a6f7cdbc10fe3e7099f0c2fc4aa211 Mon Sep 17 00:00:00 2001 From: Maxime Coste Date: Thu, 3 Sep 2015 13:21:35 +0100 Subject: Regex are overkill for shell manager env vars, we just need exact match or prefix match --- src/shell_manager.cc | 12 +++++++----- 1 file changed, 7 insertions(+), 5 deletions(-) (limited to 'src/shell_manager.cc') 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 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& 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); } } -- cgit v1.2.3