properly rewind oidentd config file
authorDaniel Albers <daniel@lbe.rs>
Wed, 8 Feb 2012 00:45:00 +0000 (01:45 +0100)
committerManuel Nickschas <sputnick@quassel-irc.org>
Mon, 13 Feb 2012 19:35:38 +0000 (20:35 +0100)
src/core/oidentdconfiggenerator.cpp
src/core/oidentdconfiggenerator.h

index 072b159..eca0fcd 100644 (file)
@@ -43,10 +43,12 @@ bool OidentdConfigGenerator::init() {
   _configFile = new QFile(configPath);
   qDebug() << "1: _configFile" << _configFile->fileName();
 
-  quasselStanza = QRegExp(QString("^lport .* { .* } #%1$").arg(configTag));
+  quasselStanza = QRegExp(QString("^lport .* \\{ .* \\} #%1\\n").arg(configTag));
 
+  _mutex.lock();
   if (parseConfig(false) && writeConfig())
     _initialized = true;
+  _mutex.unlock();
 
   qDebug() << "OidentdConfigGenerator" << (!_initialized ? "not" : "") << "initialized";
 
@@ -64,7 +66,9 @@ bool OidentdConfigGenerator::addSocket(const CoreIdentity *identity, const QHost
 
   _config.append(QString("lport %1 { reply \"%2\" } #%3\n").arg(localPort).arg(ident).arg(configTag));
 
+  _mutex.lock();
   bool ret = writeConfig();
+  _mutex.unlock();
   qDebug() << "config written" << ret;
 
   return ret;
@@ -99,16 +103,16 @@ bool OidentdConfigGenerator::parseConfig(bool keepQuasselStanzas) {
 }
 
 bool OidentdConfigGenerator::writeConfig() {
-  if (!_configFile->isOpen() && !_configFile->open(QFile::WriteOnly | QFile::Truncate))
+  if (!_configFile->isOpen() && !_configFile->open(QIODevice::ReadWrite | QIODevice::Text | QFile::Truncate))
     return false;
 
-  //FIXME: thread safety
-  QTextStream out(_configFile);
-  out << _config;
+  _configFile->seek(0);
+  _configFile->resize(0);
+  _configFile->write(_config);
 
   return _configFile->flush();
 }
 
 bool OidentdConfigGenerator::lineByUs(const QByteArray &line) {
-  return !quasselStanza.exactMatch(line);
+  return quasselStanza.exactMatch(line);
 }
index 5d96b6c..bc2e25a 100644 (file)
@@ -26,6 +26,7 @@
 #include <QFile>
 #include <QDateTime>
 #include <QHostAddress>
+#include <QMutex>
 
 #include "quassel.h"
 #include "coreidentity.h"
@@ -53,6 +54,7 @@ private:
   QDateTime _lastSync;
   QFile *_configFile;
   QByteArray _config;
+  QMutex _mutex;
 
   QDir configDir;
   QString configFileName;