diff options
author | Denis Dzyubenko <denis.dzyubenko@nokia.com> | 2012-05-25 20:00:53 +0200 |
---|---|---|
committer | Qt by Nokia <qt-info@nokia.com> | 2012-05-25 22:08:33 +0200 |
commit | 75a9436d2bc16803cd1e5ea9e60fc156a1a22dbc (patch) | |
tree | 77233c246e715bcce12e2b9d8c7e2f0dbd285af4 | |
parent | deac81d4ef114ffc157467183d02d539618a14d1 (diff) |
Changed the way we find path to private partitions.
Change-Id: I2ee101126b494287ae8d4a62601ed49d510cf56a
Reviewed-by: Tapani Mikola <tapani.mikola@nokia.com>
-rw-r--r-- | src/client/qjsondbprivatepartition.cpp | 21 | ||||
-rw-r--r-- | src/client/qjsondbprivatepartition_p.h | 1 | ||||
-rw-r--r-- | src/client/qjsondbrequest.cpp | 2 | ||||
-rw-r--r-- | src/client/qjsondbstrings_p.h | 1 | ||||
-rw-r--r-- | tests/auto/qjsondbrequest/testqjsondbrequest.cpp | 4 |
5 files changed, 18 insertions, 11 deletions
diff --git a/src/client/qjsondbprivatepartition.cpp b/src/client/qjsondbprivatepartition.cpp index 6f518e5..c4c2f94 100644 --- a/src/client/qjsondbprivatepartition.cpp +++ b/src/client/qjsondbprivatepartition.cpp @@ -155,20 +155,27 @@ void QJsonDbPrivatePartition::handleRequest(const QJsonObject &request) QtJsonDb::QJsonDbRequest::ErrorCode QJsonDbPrivatePartition::ensurePartition(const QString &partitionName, QString &message) { - QString partition = partitionName == JsonDbStrings::Partition::privatePartition() ? - QString::fromLatin1("%1.%2").arg(QString::fromLatin1(qgetenv("USER"))).arg(JsonDbStrings::Partition::privatePartition()) : - partitionName; - QString user = QString(partition).replace(QString::fromLatin1(".%1").arg(JsonDbStrings::Partition::privatePartition()), QStringLiteral("")); + Q_ASSERT(!partitionName.isEmpty()); + QString user; + QString fullPartitionName; + if (partitionName == JsonDbStrings::Partition::privatePartition()) { + user = QString::fromLatin1(qgetenv("USER")); + fullPartitionName = user + JsonDbStrings::Partition::dotPrivatePartition(); + } else { + Q_ASSERT(partitionName.endsWith(JsonDbStrings::Partition::dotPrivatePartition())); + fullPartitionName = partitionName; + user = partitionName.mid(0, partitionName.size() - JsonDbStrings::Partition::dotPrivatePartition().size()); + } // only keep a single private partition open at a time. This will cut down // on file contention and also keep the memory usage of the client under control - if (privatePartition && privatePartition->partitionSpec().name != partition) { + if (privatePartition && privatePartition->partitionSpec().name != fullPartitionName) { delete privatePartition; privatePartition = 0; } if (!privatePartition) { - struct passwd *pwd = getpwnam(user.toLatin1()); + struct passwd *pwd = getpwnam(user.toLatin1()); // not thread-safe! if (!pwd) { message = QStringLiteral("Private partition not found"); return QJsonDbRequest::InvalidPartition; @@ -184,7 +191,7 @@ QtJsonDb::QJsonDbRequest::ErrorCode QJsonDbPrivatePartition::ensurePartition(con homeDir.cd(QStringLiteral(".jsondb")); Partition::JsonDbPartitionSpec spec; - spec.name = partition; + spec.name = fullPartitionName; spec.path = homeDir.absolutePath(); privatePartition = new Partition::JsonDbPartition; diff --git a/src/client/qjsondbprivatepartition_p.h b/src/client/qjsondbprivatepartition_p.h index bb5b0ba..838e26b 100644 --- a/src/client/qjsondbprivatepartition_p.h +++ b/src/client/qjsondbprivatepartition_p.h @@ -70,7 +70,6 @@ QT_END_NAMESPACE_JSONDB_PARTITION QT_BEGIN_NAMESPACE_JSONDB class QJsonDbConnectionPrivate; -class QJsonDbRequestPrivate; class QJsonDbPrivatePartition : public QObject { diff --git a/src/client/qjsondbrequest.cpp b/src/client/qjsondbrequest.cpp index 0c11ad2..2c2eec1 100644 --- a/src/client/qjsondbrequest.cpp +++ b/src/client/qjsondbrequest.cpp @@ -182,7 +182,7 @@ void QJsonDbRequestPrivate::setRequestId(int id) bool QJsonDbRequestPrivate::isPrivatePartition() const { return partition == JsonDbStrings::Partition::privatePartition() || - partition.endsWith(QString::fromLatin1(".%1").arg(JsonDbStrings::Partition::privatePartition())); + partition.endsWith(JsonDbStrings::Partition::dotPrivatePartition()); } void QJsonDbRequestPrivate::_q_privatePartitionResults(const QList<QJsonObject> &res) diff --git a/src/client/qjsondbstrings_p.h b/src/client/qjsondbstrings_p.h index 256a110..8590c2b 100644 --- a/src/client/qjsondbstrings_p.h +++ b/src/client/qjsondbstrings_p.h @@ -127,6 +127,7 @@ class Partition { public: static inline const QString privatePartition() { return QStringLiteral("Private"); } + static inline const QString dotPrivatePartition() { return QStringLiteral(".Private"); } }; } // namespace JsonDbStrings diff --git a/tests/auto/qjsondbrequest/testqjsondbrequest.cpp b/tests/auto/qjsondbrequest/testqjsondbrequest.cpp index d2b6d13..86a1e82 100644 --- a/tests/auto/qjsondbrequest/testqjsondbrequest.cpp +++ b/tests/auto/qjsondbrequest/testqjsondbrequest.cpp @@ -126,11 +126,11 @@ void TestQJsonDbRequest::cleanupTestCase() struct passwd *pwd = getpwnam(qgetenv("USER")); if (pwd) { QDir homePartition(QString::fromLatin1("%1/.jsondb").arg(QString::fromUtf8(pwd->pw_dir))); - foreach (const QString &file, homePartition.entryList()) + foreach (const QString &file, homePartition.entryList(QStringList() << QLatin1String("*.db"))) QFile::remove(homePartition.absoluteFilePath(file)); homePartition.cdUp(); - homePartition.rmpath(QStringLiteral(".jsondb")); + homePartition.rmdir(QStringLiteral(".jsondb")); } stopDaemon(); |