summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorDenis Dzyubenko <denis.dzyubenko@nokia.com>2012-05-25 20:00:53 +0200
committerQt by Nokia <qt-info@nokia.com>2012-05-25 22:08:33 +0200
commit75a9436d2bc16803cd1e5ea9e60fc156a1a22dbc (patch)
tree77233c246e715bcce12e2b9d8c7e2f0dbd285af4
parentdeac81d4ef114ffc157467183d02d539618a14d1 (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.cpp21
-rw-r--r--src/client/qjsondbprivatepartition_p.h1
-rw-r--r--src/client/qjsondbrequest.cpp2
-rw-r--r--src/client/qjsondbstrings_p.h1
-rw-r--r--tests/auto/qjsondbrequest/testqjsondbrequest.cpp4
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();