summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorSamuli Piippo <samuli.piippo@qt.io>2019-08-27 10:07:44 +0300
committerSamuli Piippo <samuli.piippo@qt.io>2019-08-28 09:49:43 +0000
commit474fa4b7aee62e704158d213d9e67eba74c69401 (patch)
treeb4e83bb9c73b3f2bb5b87aaa0a8482a486b0da0c
parent5ab7fdbf0845c40418272bafa565295511055d3b (diff)
Add option to read environment variables from a file5.145.13
Add option "environmentFile=..." that can be point to a separate file containing environment variables in ENV=VALUE pairs, which is normally used in /etc/default/ config files. Change-Id: If21d6c260d93f1ada309eb4e917b30e9c2daa877 Reviewed-by: Kari Oikarinen <kari.oikarinen@qt.io>
-rw-r--r--main.cpp23
-rw-r--r--process.h1
2 files changed, 24 insertions, 0 deletions
diff --git a/main.cpp b/main.cpp
index 421aae1..8f6d214 100644
--- a/main.cpp
+++ b/main.cpp
@@ -195,6 +195,25 @@ static int findFirstFreePort(Utils::PortList &range)
return openServer(&s, range);
}
+bool readEnvs(Config *config)
+{
+ QFile f(config->envFile);
+ if (!f.open(QFile::ReadOnly)) {
+ fprintf(stderr, "Could not read environment file: %s\n", qPrintable(config->envFile));
+ return false;
+ }
+
+ while (!f.atEnd()) {
+ const auto line = f.readLine().simplified();
+ if (!line.startsWith("#")) {
+ const auto index = line.indexOf('=');
+ config->env[line.left(index)] = line.mid(index + 1);
+ }
+ }
+ f.close();
+ return true;
+}
+
bool parseConfigFile(Config *config, const QString &fileName)
{
QFile f(fileName);
@@ -227,6 +246,8 @@ bool parseConfigFile(Config *config, const QString &fileName)
config->debugInterface = Config::PublicDebugInterface;
else
qWarning() << "Unkonwn value for debuginterface:" << value;
+ } else if (line.startsWith("environmentFile=")) {
+ config->envFile = line.mid(16).simplified();
}
}
f.close();
@@ -349,6 +370,8 @@ int main(int argc, char **argv)
Config config;
if (!parseConfigFile(&config, "/etc/appcontroller.conf"))
fprintf(stderr, "Failed to parse config file.\n");
+ if (!config.envFile.isEmpty())
+ readEnvs(&config);
while (!args.isEmpty()) {
const QString arg(args.takeFirst());
diff --git a/process.h b/process.h
index d820707..8b84779 100644
--- a/process.h
+++ b/process.h
@@ -42,6 +42,7 @@ struct Config {
QMap<QString,QString> env;
QStringList args;
DebugInterface debugInterface;
+ QString envFile;
};
class Process : public QObject