summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorRainer Keller <rainer.keller@theqtcompany.com>2015-06-01 11:25:31 +0200
committerRainer Keller <rainer.keller@theqtcompany.com>2015-06-02 16:45:53 +0300
commit91882497952ebf33a76888b79125ce9cd56994d3 (patch)
tree262669ac976f5f48024e4ed5357eb617279f984b
parent53ea6084989e386511f73aa7d1ebbc01b8a6b606 (diff)
Parse additional config files
Some runtime settings need to be applied to the environment. Additional config files may be located in /tmp/b2qt/appcontroller.config.d or /var/lib/b2qt/appcontroller.config.d Task-number: QTEE-931 Change-Id: Id6c8c5695e6ca74351c7f81a66aa9a75a948792a Reviewed-by: Ulf Hermann <ulf.hermann@theqtcompany.com>
-rw-r--r--main.cpp58
-rw-r--r--process.h2
2 files changed, 39 insertions, 21 deletions
diff --git a/main.cpp b/main.cpp
index fb52564..0f3486e 100644
--- a/main.cpp
+++ b/main.cpp
@@ -20,6 +20,7 @@
#include "portlist.h"
#include "perfprocesshandler.h"
#include <QCoreApplication>
+#include <QDir>
#include <QTcpServer>
#include <QProcess>
#include <errno.h>
@@ -160,21 +161,13 @@ static int findFirstFreePort(Utils::PortList &range)
return openServer(&s, range);
}
-static Config parseConfigFile()
+static bool parseConfigFile(Config *config, const QString &fileName)
{
- Config config;
- config.base = config.platform = QLatin1String("unknown");
- config.debugInterface = Config::LocalDebugInterface;
-
-#ifdef Q_OS_ANDROID
- QFile f("/system/bin/appcontroller.conf");
-#else
- QFile f("/etc/appcontroller.conf");
-#endif
+ QFile f(fileName);
if (!f.open(QFile::ReadOnly)) {
- fprintf(stderr, "Could not read config file.\n");
- return config;
+ fprintf(stderr, "Could not read config file: %s\n", qPrintable(fileName));
+ return false;
}
while (!f.atEnd()) {
@@ -185,27 +178,44 @@ static Config parseConfigFile()
if (index < 2) {
// ignore
} else
- config.env[sub.left(index)] = sub.mid(index+1);
+ config->env[sub.left(index)] = sub.mid(index+1);
} else if (line.startsWith("append=")) {
- config.args += line.mid(7).simplified();
+ config->args += line.mid(7).simplified();
} else if (line.startsWith("base=")) {
- config.base = line.mid(5).simplified();
+ config->base = line.mid(5).simplified();
} else if (line.startsWith("platform=")) {
- config.platform = line.mid(9).simplified();
+ config->platform = line.mid(9).simplified();
} else if (line.startsWith("debugInterface=")) {
const QString value = line.mid(15).simplified();
if (value == "local")
- config.debugInterface = Config::LocalDebugInterface;
+ config->debugInterface = Config::LocalDebugInterface;
else if (value == "public")
- config.debugInterface = Config::PublicDebugInterface;
+ config->debugInterface = Config::PublicDebugInterface;
else
qWarning() << "Unkonwn value for debuginterface:" << value;
}
}
f.close();
- return config;
+ return true;
}
+static bool parseConfigFileDirectory(Config *config, const QString &dirName)
+{
+ QDir d(dirName);
+ if (d.exists()) {
+ foreach (const QString &fileName, d.entryList(QDir::Files)) {
+ const QString file(d.absoluteFilePath(fileName));
+
+ if (!parseConfigFile(config, file)) {
+ fprintf(stderr, "Failed to parse config file: %s\n", qPrintable(file));
+ return false;
+ }
+ }
+ }
+ return true;
+}
+
+
static bool removeDefault()
{
if (QFile::exists(B2QT_PREFIX)) {
@@ -283,7 +293,15 @@ int main(int argc, char **argv)
return 1;
}
- Config config = parseConfigFile();
+ Config config;
+ if (!parseConfigFile(&config, "/etc/appcontroller.conf")) {
+ fprintf(stderr, "Failed to parse config file.\n");
+ return 1;
+ }
+
+ // Parse temporary config files
+ parseConfigFileDirectory(&config, "/var/lib/b2qt/appcontroller.conf.d");
+ parseConfigFileDirectory(&config, "/tmp/b2qt/appcontroller.conf.d");
while (!args.isEmpty()) {
const QString arg(args.takeFirst());
diff --git a/process.h b/process.h
index bf67d96..d175dd3 100644
--- a/process.h
+++ b/process.h
@@ -37,7 +37,7 @@ struct Config {
PublicDebugInterface
};
- Config() : flags(0) { }
+ Config() : platform("unknown"), flags(0), debugInterface(LocalDebugInterface) { }
QString base;
QString platform;