summaryrefslogtreecommitdiffstats
path: root/src/corelib/io/qfsfileengine_unix.cpp
diff options
context:
space:
mode:
authorQt Continuous Integration System <qt-info@nokia.com>2010-03-16 17:30:24 (GMT)
committerQt Continuous Integration System <qt-info@nokia.com>2010-03-16 17:30:24 (GMT)
commit1a8eaa2087fde99366da6faa11ef8c14711a75ff (patch)
tree8c35e8e93d8b43f8ed4041f3fae7b9ec39aae4d0 /src/corelib/io/qfsfileengine_unix.cpp
parentb83172f8cfb4439f17c96886f0c6046a885370f6 (diff)
parentbcc8ecc91c9884d14dd4eda5fc1a4ab4ba7aab62 (diff)
downloadQt-1a8eaa2087fde99366da6faa11ef8c14711a75ff.zip
Qt-1a8eaa2087fde99366da6faa11ef8c14711a75ff.tar.gz
Qt-1a8eaa2087fde99366da6faa11ef8c14711a75ff.tar.bz2
Merge branch '4.7' of scm.dev.nokia.troll.no:qt/oslo-staging-1 into 4.7-integration
* '4.7' of scm.dev.nokia.troll.no:qt/oslo-staging-1: (81 commits) Define JS_NO_EXPORT to avoid JSC C API functions being exported Don't use QScriptValueIterator to iterate over an array QtScript: Fix regression when calling newQObject() from native constructor Added note to OS X installation instructions. Keypress events ignored in listview on Cocoa (64 Bit) with Japanese IME Update only appropriate rectangles during update_sys(). Marked QTDS obsolete from Qt 4.7. QNetworkReply: Fix canReadLine() Abort waiting replies on session error. different approach to fixing "the other" aliasing issue fix aliasing issue in node_construct() detach in fewer cases, remove redundant calculation SSL: Fix memleak related to local certificate Improve keyboard layout detection on X11 Compile on ARM with -Werror -Wold-style-cast Use the vista-style native dialog for QFileDialog::getExistingDirectory Apply the stdset attribute for resource properties doc: Completed sentence about HideNameFilterDetails Doc fix in QLocale Doc for for QGestureRecognizer::create. ...
Diffstat (limited to 'src/corelib/io/qfsfileengine_unix.cpp')
-rw-r--r--src/corelib/io/qfsfileengine_unix.cpp68
1 files changed, 42 insertions, 26 deletions
diff --git a/src/corelib/io/qfsfileengine_unix.cpp b/src/corelib/io/qfsfileengine_unix.cpp
index 1331f54..6df00d6 100644
--- a/src/corelib/io/qfsfileengine_unix.cpp
+++ b/src/corelib/io/qfsfileengine_unix.cpp
@@ -736,6 +736,46 @@ static bool _q_isMacHidden(const QString &path)
}
#endif
+QAbstractFileEngine::FileFlags QFSFileEnginePrivate::getPermissions(QAbstractFileEngine::FileFlags type) const
+{
+ QAbstractFileEngine::FileFlags ret = 0;
+
+ if (st.st_mode & S_IRUSR)
+ ret |= QAbstractFileEngine::ReadOwnerPerm;
+ if (st.st_mode & S_IWUSR)
+ ret |= QAbstractFileEngine::WriteOwnerPerm;
+ if (st.st_mode & S_IXUSR)
+ ret |= QAbstractFileEngine::ExeOwnerPerm;
+ if (st.st_mode & S_IRGRP)
+ ret |= QAbstractFileEngine::ReadGroupPerm;
+ if (st.st_mode & S_IWGRP)
+ ret |= QAbstractFileEngine::WriteGroupPerm;
+ if (st.st_mode & S_IXGRP)
+ ret |= QAbstractFileEngine::ExeGroupPerm;
+ if (st.st_mode & S_IROTH)
+ ret |= QAbstractFileEngine::ReadOtherPerm;
+ if (st.st_mode & S_IWOTH)
+ ret |= QAbstractFileEngine::WriteOtherPerm;
+ if (st.st_mode & S_IXOTH)
+ ret |= QAbstractFileEngine::ExeOtherPerm;
+
+ // calculate user permissions
+ if (type & QAbstractFileEngine::ReadUserPerm) {
+ if (QT_ACCESS(nativeFilePath.constData(), R_OK) == 0)
+ ret |= QAbstractFileEngine::ReadUserPerm;
+ }
+ if (type & QAbstractFileEngine::WriteUserPerm) {
+ if (QT_ACCESS(nativeFilePath.constData(), W_OK) == 0)
+ ret |= QAbstractFileEngine::WriteUserPerm;
+ }
+ if (type & QAbstractFileEngine::ExeUserPerm) {
+ if (QT_ACCESS(nativeFilePath.constData(), X_OK) == 0)
+ ret |= QAbstractFileEngine::ExeUserPerm;
+ }
+
+ return ret;
+}
+
/*!
\reimp
*/
@@ -755,32 +795,8 @@ QAbstractFileEngine::FileFlags QFSFileEngine::fileFlags(FileFlags type) const
if (!exists && !d->isSymlink())
return ret;
- if (exists && (type & PermsMask)) {
- if (d->st.st_mode & S_IRUSR)
- ret |= ReadOwnerPerm;
- if (d->st.st_mode & S_IWUSR)
- ret |= WriteOwnerPerm;
- if (d->st.st_mode & S_IXUSR)
- ret |= ExeOwnerPerm;
- if (d->st.st_mode & S_IRUSR)
- ret |= ReadUserPerm;
- if (d->st.st_mode & S_IWUSR)
- ret |= WriteUserPerm;
- if (d->st.st_mode & S_IXUSR)
- ret |= ExeUserPerm;
- if (d->st.st_mode & S_IRGRP)
- ret |= ReadGroupPerm;
- if (d->st.st_mode & S_IWGRP)
- ret |= WriteGroupPerm;
- if (d->st.st_mode & S_IXGRP)
- ret |= ExeGroupPerm;
- if (d->st.st_mode & S_IROTH)
- ret |= ReadOtherPerm;
- if (d->st.st_mode & S_IWOTH)
- ret |= WriteOtherPerm;
- if (d->st.st_mode & S_IXOTH)
- ret |= ExeOtherPerm;
- }
+ if (exists && (type & PermsMask))
+ ret |= d->getPermissions(type);
if (type & TypesMask) {
#if !defined(QWS) && defined(Q_OS_MAC)
bool foundAlias = false;