diff options
| author | Maxime Coste <frrrwww@gmail.com> | 2015-09-03 13:21:35 +0100 |
|---|---|---|
| committer | Maxime Coste <frrrwww@gmail.com> | 2015-09-03 13:21:35 +0100 |
| commit | e69db0f671a6f7cdbc10fe3e7099f0c2fc4aa211 (patch) | |
| tree | 16779c28897cac052494a6f668315de823bc9549 /src/shell_manager.cc | |
| parent | ea7f76f7f27bd5fd461224b15c3eea9c7ce350f3 (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.cc | 12 |
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); } } |
