diff options
| author | vaxerski <43317083+vaxerski@users.noreply.github.com> | 2023-03-05 14:54:26 +0000 |
|---|---|---|
| committer | vaxerski <43317083+vaxerski@users.noreply.github.com> | 2023-03-05 14:54:32 +0000 |
| commit | b03c8970e698312e237fe176ee2654e819c5c202 (patch) | |
| tree | 3881e736f5b1b317299eef7451bb1fed7817852f /src/config/ConfigManager.cpp | |
| parent | de5f1b2a833a59d3b0375f24675d27cea99e56d1 (diff) | |
Allow environment in config
Diffstat (limited to 'src/config/ConfigManager.cpp')
| -rw-r--r-- | src/config/ConfigManager.cpp | 24 |
1 files changed, 24 insertions, 0 deletions
diff --git a/src/config/ConfigManager.cpp b/src/config/ConfigManager.cpp index 5037d9cb..6133f41f 100644 --- a/src/config/ConfigManager.cpp +++ b/src/config/ConfigManager.cpp @@ -31,6 +31,18 @@ CConfigManager::CConfigManager() { Debug::disableLogs = &configValues["debug:disable_logs"].intValue; Debug::disableTime = &configValues["debug:disable_time"].intValue; + + populateEnvironment(); +} + +void CConfigManager::populateEnvironment() { + environmentVariables.clear(); + for (char** env = environ; *env; ++env) { + const std::string ENVVAR = *env; + const auto VARIABLE = ENVVAR.substr(0, ENVVAR.find_first_of('=')); + const auto VALUE = ENVVAR.substr(ENVVAR.find_first_of('=') + 1); + environmentVariables[VARIABLE] = VALUE; + } } void CConfigManager::setDefaultVars() { @@ -1140,13 +1152,25 @@ void CConfigManager::applyUserDefinedVars(std::string& line, const size_t equals while (dollarPlace != std::string::npos) { const auto STRAFTERDOLLAR = line.substr(dollarPlace + 1); + bool found = false; for (auto& [var, value] : configDynamicVars) { if (STRAFTERDOLLAR.find(var) == 0) { line.replace(dollarPlace, var.length() + 1, value); + found = true; break; } } + if (!found) { + // maybe env? + for (auto& [var, value] : environmentVariables) { + if (STRAFTERDOLLAR.find(var) == 0) { + line.replace(dollarPlace, var.length() + 1, value); + break; + } + } + } + dollarPlace = line.find_first_of('$', dollarPlace + 1); } } |
