summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorSadie Powell <sadie@witchery.services>2020-02-20 18:02:51 +0000
committerSadie Powell <sadie@witchery.services>2020-02-20 18:02:51 +0000
commit82c89d40cc6cd0100b4c68e72f869ff007f4ef36 (patch)
tree051fabbee8902adcbb334c7c553278cfd7afcb96 /src
parent89f36a6f1c13465cebe56ee1e12fec1dec40679a (diff)
Add support for using environment variables in the config.
Diffstat (limited to 'src')
-rw-r--r--src/configparser.cpp9
1 files changed, 8 insertions, 1 deletions
diff --git a/src/configparser.cpp b/src/configparser.cpp
index 0102c910c..6fdc56c32 100644
--- a/src/configparser.cpp
+++ b/src/configparser.cpp
@@ -205,7 +205,7 @@ struct Parser
while (1)
{
ch = next();
- if (isalnum(ch) || (varname.empty() && ch == '#'))
+ if (isalnum(ch) || (varname.empty() && ch == '#') || ch == '.')
varname.push_back(ch);
else if (ch == ';')
break;
@@ -233,6 +233,13 @@ struct Parser
throw CoreException("Invalid numeric character reference '&" + varname + ";'");
value.push_back(static_cast<char>(lvalue));
}
+ else if (varname.compare(0, 4, "env.") == 0)
+ {
+ const char* envstr = getenv(varname.c_str() + 4);
+ if (!envstr)
+ throw CoreException("Undefined XML environment entity reference '&" + varname + ";'");
+ value.append(envstr);
+ }
else
{
insp::flat_map<std::string, std::string>::iterator var = stack.vars.find(varname);