summaryrefslogtreecommitdiffstats
path: root/src/corelib/io/qfilesystemengine_symbian.cpp
diff options
context:
space:
mode:
authorRobin Burchell <robin.burchell@collabora.com>2011-12-27 18:11:08 +0100
committerQt by Nokia <qt-info@nokia.com>2012-01-02 15:08:19 +0100
commit467a000089f741dd6def17dacb7f1bcc98a9249a (patch)
tree8390a8cf654b81786569b5e516ed7f246a393482 /src/corelib/io/qfilesystemengine_symbian.cpp
parent5a3b08e994b9120a370123d1a8d96f28216eaeca (diff)
Remove Symbian support from src/corelib/io/.
Change-Id: I52c2a58396e03f29ca478de34c914535c7ae1012 Reviewed-by: Thiago Macieira <thiago.macieira@intel.com> Reviewed-by: Lars Knoll <lars.knoll@nokia.com> Reviewed-by: Bradley T. Hughes <bradley.hughes@nokia.com> Reviewed-by: João Abecasis <joao.abecasis@nokia.com>
Diffstat (limited to 'src/corelib/io/qfilesystemengine_symbian.cpp')
-rw-r--r--src/corelib/io/qfilesystemengine_symbian.cpp406
1 files changed, 0 insertions, 406 deletions
diff --git a/src/corelib/io/qfilesystemengine_symbian.cpp b/src/corelib/io/qfilesystemengine_symbian.cpp
deleted file mode 100644
index c8c1dfdc84..0000000000
--- a/src/corelib/io/qfilesystemengine_symbian.cpp
+++ /dev/null
@@ -1,406 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2011 Nokia Corporation and/or its subsidiary(-ies).
-** All rights reserved.
-** Contact: Nokia Corporation (qt-info@nokia.com)
-**
-** This file is part of the QtCore module of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:LGPL$
-** GNU Lesser General Public License Usage
-** This file may be used under the terms of the GNU Lesser General Public
-** License version 2.1 as published by the Free Software Foundation and
-** appearing in the file LICENSE.LGPL included in the packaging of this
-** file. Please review the following information to ensure the GNU Lesser
-** General Public License version 2.1 requirements will be met:
-** http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
-**
-** In addition, as a special exception, Nokia gives you certain additional
-** rights. These rights are described in the Nokia Qt LGPL Exception
-** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU General
-** Public License version 3.0 as published by the Free Software Foundation
-** and appearing in the file LICENSE.GPL included in the packaging of this
-** file. Please review the following information to ensure the GNU General
-** Public License version 3.0 requirements will be met:
-** http://www.gnu.org/copyleft/gpl.html.
-**
-** Other Usage
-** Alternatively, this file may be used in accordance with the terms and
-** conditions contained in a signed written agreement between you and Nokia.
-**
-**
-**
-**
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
-
-#include "qfilesystemengine_p.h"
-#include "qfsfileengine.h"
-#include <QtCore/private/qcore_symbian_p.h>
-#include <QtCore/qcoreapplication.h>
-
-#include <f32file.h>
-#include <pathinfo.h>
-#include <wchar.h>
-
-QT_BEGIN_NAMESPACE
-
-bool QFileSystemEngine::isCaseSensitive()
-{
- return false;
-}
-
-//TODO: resolve this with QDir::cleanPath, without breaking the behaviour of that
-//function which is documented only by autotest
-//input: a dirty absolute path, e.g. c:/../../foo/./
-//output: a clean absolute path, e.g. c:/foo/
-static QString symbianCleanAbsolutePath(const QString& path)
-{
- bool isDir = path.endsWith(QLatin1Char('/'));
- //using SkipEmptyParts flag to eliminate duplicated slashes
- QStringList components = path.split(QLatin1Char('/'), QString::SkipEmptyParts);
- int cdups = 0;
- for(int i=components.count() - 1; i>=0; --i) {
- if(components.at(i) == QLatin1String("..")) {
- components.removeAt(i);
- cdups++;
- }
- else if(components.at(i) == QLatin1String(".")) {
- components.removeAt(i);
- }
- else if(cdups && i > 0) {
- --cdups;
- components.removeAt(i);
- }
- }
- QString result = components.join(QLatin1String("/"));
- if ((isDir&& !result.endsWith(QLatin1Char('/')))
- || (result.length() == 2 && result.at(1).unicode() == ':'))
- result.append(QLatin1Char('/'));
- return result;
-}
-
-//static
-QFileSystemEntry QFileSystemEngine::getLinkTarget(const QFileSystemEntry &link, QFileSystemMetaData &data)
-{
- Q_UNUSED(data);
- return link;
-}
-
-//static
-QFileSystemEntry QFileSystemEngine::canonicalName(const QFileSystemEntry &entry, QFileSystemMetaData &data)
-{
- if (entry.isEmpty() || entry.isRoot())
- return entry;
-
- QFileSystemEntry result = absoluteName(entry);
- if (!data.hasFlags(QFileSystemMetaData::ExistsAttribute))
- fillMetaData(result, data, QFileSystemMetaData::ExistsAttribute);
- if (!data.exists()) {
- // file doesn't exist
- return QFileSystemEntry();
- } else {
- return result;
- }
-}
-
-//static
-QFileSystemEntry QFileSystemEngine::absoluteName(const QFileSystemEntry &entry)
-{
- QString orig = entry.filePath();
- const bool isAbsolute = entry.isAbsolute();
- const bool isDirty = !entry.isClean();
- if (isAbsolute && !isDirty)
- return entry;
-
- const bool isRelative = entry.isRelative();
- const bool needsDrive = (!orig.isEmpty() && orig.at(0).unicode() == '/');
- const bool isDriveLetter = !needsDrive && !isAbsolute && !isRelative && orig.length() == 2;
- const bool isDriveRelative = !needsDrive && !isAbsolute && !isRelative && orig.length() > 2;
-
- QString result;
- if (needsDrive || isDriveLetter || isDriveRelative || !isAbsolute || orig.isEmpty()) {
- QFileSystemEntry cur(currentPath());
- if(needsDrive)
- result = cur.filePath().left(2);
- else if(isDriveRelative && cur.filePath().at(0) != orig.at(0))
- result = orig.left(2); // for BC, see tst_QFileInfo::absolutePath(<not current drive>:my.dll)
- else
- result = cur.filePath();
- if(isDriveLetter) {
- result[0] = orig.at(0); //copy drive letter
- orig.clear();
- }
- if(isDriveRelative) {
- orig = orig.mid(2); //discard the drive specifier from orig
- }
- }
- if (!orig.isEmpty() && !(orig.length() == 1 && orig.at(0).unicode() == '.')) {
- if (!result.isEmpty() && !result.endsWith(QLatin1Char('/')))
- result.append(QLatin1Char('/'));
- result.append(orig);
- }
-
- return QFileSystemEntry(symbianCleanAbsolutePath(result), QFileSystemEntry::FromInternalPath());
-}
-
-void QFileSystemMetaData::fillFromTEntry(const TEntry& entry)
-{
- entryFlags &= ~(QFileSystemMetaData::SymbianTEntryFlags);
- knownFlagsMask |= QFileSystemMetaData::SymbianTEntryFlags;
- //Symbian doesn't have unix type file permissions
- entryFlags |= QFileSystemMetaData::ReadPermissions;
- if(!entry.IsReadOnly()) {
- entryFlags |= QFileSystemMetaData::WritePermissions;
- }
- //set the type
- if(entry.IsDir())
- entryFlags |= (QFileSystemMetaData::DirectoryType | QFileSystemMetaData::ExecutePermissions);
- else
- entryFlags |= QFileSystemMetaData::FileType;
-
- //set the attributes
- entryFlags |= QFileSystemMetaData::ExistsAttribute;
- if(entry.IsHidden())
- entryFlags |= QFileSystemMetaData::HiddenAttribute;
-
-#ifdef SYMBIAN_ENABLE_64_BIT_FILE_SERVER_API
- size_ = entry.FileSize();
-#else
- size_ = (TUint)(entry.iSize);
-#endif
-
- modificationTime_ = entry.iModified;
-}
-
-void QFileSystemMetaData::fillFromVolumeInfo(const TVolumeInfo& info)
-{
- entryFlags &= ~(QFileSystemMetaData::SymbianTEntryFlags);
- knownFlagsMask |= QFileSystemMetaData::SymbianTEntryFlags;
- entryFlags |= QFileSystemMetaData::ExistsAttribute;
- entryFlags |= QFileSystemMetaData::Permissions;
- if(info.iDrive.iDriveAtt & KDriveAttRom) {
- entryFlags &= ~(QFileSystemMetaData::WritePermissions);
- }
- entryFlags |= QFileSystemMetaData::DirectoryType;
- size_ = info.iSize;
- modificationTime_ = qt_symbian_time_t_To_TTime(0);
-}
-
-//static
-bool QFileSystemEngine::fillMetaData(const QFileSystemEntry &entry, QFileSystemMetaData &data, QFileSystemMetaData::MetaDataFlags what)
-{
- if (what & QFileSystemMetaData::SymbianTEntryFlags) {
- RFs& fs(qt_s60GetRFs());
- TInt err;
- QFileSystemEntry absentry(absoluteName(entry));
- if (entry.isEmpty()) {
- err = KErrNotFound;
- } else 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(absentry.nativeFilePath().at(0).unicode()), drive);
- if (!err) {
- TVolumeInfo info;
- err = fs.Volume(info, drive);
- if (!err)
- data.fillFromVolumeInfo(info);
- }
- } else {
- TEntry ent;
- err = fs.Entry(qt_QString2TPtrC(absentry.nativeFilePath()), ent);
- if (!err)
- data.fillFromTEntry(ent);
- }
- if (err) {
- data.size_ = 0;
- data.modificationTime_ = TTime(0);
- data.entryFlags &= ~(QFileSystemMetaData::SymbianTEntryFlags);
- }
- //files in /sys/bin on any drive are executable, even though we don't normally have permission to check whether they exist or not
- if(absentry.filePath().midRef(1,10).compare(QLatin1String(":/sys/bin/"), Qt::CaseInsensitive) == 0)
- data.entryFlags |= QFileSystemMetaData::ExecutePermissions;
- }
- return data.hasFlags(what);
-}
-
-//static
-bool QFileSystemEngine::createDirectory(const QFileSystemEntry &entry, bool createParents)
-{
- QString abspath = absoluteName(entry).nativeFilePath();
- if (!abspath.endsWith(QLatin1Char('\\')))
- abspath.append(QLatin1Char('\\'));
- TInt r;
- if (createParents)
- r = qt_s60GetRFs().MkDirAll(qt_QString2TPtrC(abspath));
- else
- r = qt_s60GetRFs().MkDir(qt_QString2TPtrC(abspath));
- if (createParents && r == KErrAlreadyExists)
- return true; //# Qt5 - QDir::mkdir returns false for existing dir, QDir::mkpath returns true (should be made consistent in Qt 5)
- return (r == KErrNone);
-}
-
-//static
-bool QFileSystemEngine::removeDirectory(const QFileSystemEntry &entry, bool removeEmptyParents)
-{
- QString abspath = absoluteName(entry).nativeFilePath();
- if (!abspath.endsWith(QLatin1Char('\\')))
- abspath.append(QLatin1Char('\\'));
- TPtrC dir(qt_QString2TPtrC(abspath));
- RFs& fs = qt_s60GetRFs();
- bool ok = false;
- //behaviour of FS file engine:
- //returns true if the directory could be removed
- //success/failure of removing parent directories does not matter
- while (KErrNone == fs.RmDir(dir)) {
- ok = true;
- if (!removeEmptyParents)
- break;
- //RFs::RmDir treats "c:\foo\bar" and "c:\foo\" the same, so it is sufficient to remove the last \ to the end
- dir.Set(dir.Left(dir.LocateReverse(TChar('\\'))));
- }
- return ok;
-}
-
-//static
-bool QFileSystemEngine::createLink(const QFileSystemEntry &source, const QFileSystemEntry &target, QSystemError &error)
-{
- Q_UNUSED(source)
- Q_UNUSED(target)
- error = QSystemError(KErrNotSupported, QSystemError::NativeError);
- return false;
-}
-
-//static
-bool QFileSystemEngine::copyFile(const QFileSystemEntry &source, const QFileSystemEntry &target, QSystemError &error)
-{
- //CFileMan is allocated each time because it is not thread-safe
- CFileMan *fm = 0;
- TRAPD(err, fm = CFileMan::NewL(qt_s60GetRFs()));
- if (err == KErrNone) {
- err = fm->Copy(qt_QString2TPtrC(absoluteName(source).nativeFilePath()), qt_QString2TPtrC(absoluteName(target).nativeFilePath()), 0);
- delete fm;
- }
- if (err == KErrNone)
- return true;
- error = QSystemError(err, QSystemError::NativeError);
- return false;
-}
-
-//static
-bool QFileSystemEngine::renameFile(const QFileSystemEntry &source, const QFileSystemEntry &target, QSystemError &error)
-{
- QString sourcepath = absoluteName(source).nativeFilePath();
- QString targetpath = absoluteName(target).nativeFilePath();
- RFs& fs(qt_s60GetRFs());
- TInt err = fs.Rename(qt_QString2TPtrC(sourcepath), qt_QString2TPtrC(targetpath));
- if (err == KErrNone)
- return true;
- error = QSystemError(err, QSystemError::NativeError);
- return false;
-}
-
-//static
-bool QFileSystemEngine::removeFile(const QFileSystemEntry &entry, QSystemError &error)
-{
- QString targetpath = absoluteName(entry).nativeFilePath();
- RFs& fs(qt_s60GetRFs());
- TInt err = fs.Delete(qt_QString2TPtrC(targetpath));
- if (err == KErrNone)
- return true;
- error = QSystemError(err, QSystemError::NativeError);
- return false;
-}
-
-//static
-bool QFileSystemEngine::setPermissions(const QFileSystemEntry &entry, QFile::Permissions permissions, QSystemError &error, QFileSystemMetaData *data)
-{
- QString targetpath = absoluteName(entry).nativeFilePath();
- TUint setmask = 0;
- TUint clearmask = 0;
- RFs& fs(qt_s60GetRFs());
- if (permissions & (QFile::WriteOwner | QFile::WriteUser | QFile::WriteGroup | QFile::WriteOther))
- clearmask = KEntryAttReadOnly; //if anyone can write, it's not read-only
- else
- setmask = KEntryAttReadOnly;
- TInt err = fs.SetAtt(qt_QString2TPtrC(targetpath), setmask, clearmask);
- if (data && !err) {
- data->entryFlags &= ~QFileSystemMetaData::Permissions;
- data->entryFlags |= QFileSystemMetaData::MetaDataFlag(uint(permissions));
- data->knownFlagsMask |= QFileSystemMetaData::Permissions;
- }
- if (err == KErrNone)
- return true;
- error = QSystemError(err, QSystemError::NativeError);
- return false;
-}
-
-QString QFileSystemEngine::homePath()
-{
- QString home = QDir::fromNativeSeparators(qt_TDesC2QString(PathInfo::PhoneMemoryRootPath()));
- if(home.endsWith(QLatin1Char('/')))
- home.chop(1);
- return home;
-}
-
-QString QFileSystemEngine::rootPath()
-{
- TChar drive;
- TInt err = RFs::DriveToChar(RFs::GetSystemDrive(), drive); //RFs::GetSystemDriveChar not supported on S60 3.1
- Q_ASSERT(err == KErrNone); //RFs::GetSystemDrive() shall always return a convertible drive number on a valid OS configuration
- return QString(QChar(drive)).append(QLatin1String(":/"));
-}
-
-QString QFileSystemEngine::tempPath()
-{
- return rootPath().append(QLatin1String("system/temp"));
-}
-
-//static
-bool QFileSystemEngine::setCurrentPath(const QFileSystemEntry &entry)
-{
- QFileSystemMetaData meta;
- QFileSystemEntry absname = absoluteName(entry);
- fillMetaData(absname, meta, QFileSystemMetaData::ExistsAttribute | QFileSystemMetaData::DirectoryType);
- if(!(meta.exists() && meta.isDirectory()))
- return false;
-
- RFs& fs = qt_s60GetRFs();
- QString abspath = absname.nativeFilePath();
- if(!abspath.endsWith(QLatin1Char('\\')))
- abspath.append(QLatin1Char('\\'));
- TInt r = fs.SetSessionPath(qt_QString2TPtrC(abspath));
- //SetSessionPath succeeds for non existent directory, which is why it's checked above
- if (r == KErrNone) {
- __ASSERT_COMPILE(sizeof(wchar_t) == sizeof(unsigned short));
- //attempt to set open C to the same path
- r = ::wchdir(reinterpret_cast<const wchar_t *>(absname.filePath().utf16()));
- if (r < 0)
- qWarning("failed to sync path to open C");
- return true;
- }
- return false;
-}
-
-//static
-QFileSystemEntry QFileSystemEngine::currentPath()
-{
- TFileName fn;
- QFileSystemEntry ret;
- TInt r = qt_s60GetRFs().SessionPath(fn);
- if(r == KErrNone) {
- //remove terminating slash from non root paths (session path is clean, absolute and always ends in a \)
- if(fn.Length() > 3 && fn[fn.Length() - 1] == '\\')
- fn.SetLength(fn.Length() - 1);
- ret = QFileSystemEntry(qt_TDesC2QString(fn), QFileSystemEntry::FromNativePath());
- }
- return ret;
-}
-
-QT_END_NAMESPACE