summaryrefslogtreecommitdiffstats
path: root/src/corelib/io/qfilesystemengine_symbian.cpp
diff options
context:
space:
mode:
authorShane Kearns <shane.kearns@accenture.com>2010-09-08 20:24:45 +0100
committerShane Kearns <shane.kearns@accenture.com>2010-09-09 10:37:10 +0100
commit927469d518afa64d8ec8dc54e6169fa43b54cd96 (patch)
tree73184704fb059f042d9d727310635b75c144d5da /src/corelib/io/qfilesystemengine_symbian.cpp
parent97e8a289380202da7041e40574d58b08a91e0fd0 (diff)
Fixes for isRoot() on symbian
Because "/" is considered to be a root directory, root paths must be converted to absolute paths before volume info can be retrieved. Also special handling in absoluteName is needed to avoid creating "c://" Reviewed-By: joao
Diffstat (limited to 'src/corelib/io/qfilesystemengine_symbian.cpp')
-rw-r--r--src/corelib/io/qfilesystemengine_symbian.cpp10
1 files changed, 6 insertions, 4 deletions
diff --git a/src/corelib/io/qfilesystemengine_symbian.cpp b/src/corelib/io/qfilesystemengine_symbian.cpp
index 3638196bee..1205274035 100644
--- a/src/corelib/io/qfilesystemengine_symbian.cpp
+++ b/src/corelib/io/qfilesystemengine_symbian.cpp
@@ -115,9 +115,10 @@ QFileSystemEntry QFileSystemEngine::absoluteName(const QFileSystemEntry &entry)
}
const bool isDir = result.endsWith('/');
+ const bool isRoot = entry.isRoot();
result = QDir::cleanPath(result);
- if (isDir)
+ if (isDir && !isRoot)
result.append(QLatin1Char('/'));
return QFileSystemEntry(result);
}
@@ -175,11 +176,12 @@ bool QFileSystemEngine::fillMetaData(const QFileSystemEntry &entry, QFileSystemM
RFs& fs(qt_s60GetRFs());
TInt err;
data.entryFlags &= ~(QFileSystemMetaData::SymbianTEntryFlags);
- if (entry.isRoot()) {
+ QFileSystemEntry absentry(absoluteName(entry));
+ if (absentry.isRoot()) {
//Root directories don't have an entry, and Entry() returns KErrBadName.
//Therefore get information about the volume instead.
TInt drive;
- err = RFs::CharToDrive(TChar(entry.nativeFilePath().at(0).unicode()), drive);
+ err = RFs::CharToDrive(TChar(absentry.nativeFilePath().at(0).unicode()), drive);
if (!err) {
TVolumeInfo info;
err = fs.Volume(info, drive);
@@ -188,7 +190,7 @@ bool QFileSystemEngine::fillMetaData(const QFileSystemEntry &entry, QFileSystemM
}
} else {
TEntry ent;
- err = fs.Entry(qt_QString2TPtrC(absoluteName(entry).nativeFilePath()), ent);
+ err = fs.Entry(qt_QString2TPtrC(absentry.nativeFilePath()), ent);
if (!err)
data.fillFromTEntry(ent);
}