diff options
author | Shane Kearns <shane.kearns@accenture.com> | 2010-09-08 20:24:45 +0100 |
---|---|---|
committer | Shane Kearns <shane.kearns@accenture.com> | 2010-09-09 10:37:10 +0100 |
commit | 927469d518afa64d8ec8dc54e6169fa43b54cd96 (patch) | |
tree | 73184704fb059f042d9d727310635b75c144d5da /src/corelib/io/qfilesystemengine_symbian.cpp | |
parent | 97e8a289380202da7041e40574d58b08a91e0fd0 (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.cpp | 10 |
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); } |