summaryrefslogtreecommitdiffstats
path: root/src/corelib/io/qfsfileengine_unix.cpp
diff options
context:
space:
mode:
authorDmytro Poplavskiy <dmytro.poplavskiy@nokia.com>2010-03-09 00:58:23 (GMT)
committerDmytro Poplavskiy <dmytro.poplavskiy@nokia.com>2010-03-09 00:58:23 (GMT)
commita4ffe2d274cae2510d72d04f67b42f9448282fbd (patch)
tree73bc2d655e4f9d449ff51671ecd50f76a929374c /src/corelib/io/qfsfileengine_unix.cpp
parent7a5cc73816df5cf65e8a9aaafd750acdac9ca5a3 (diff)
parent86354a3896b92b110e5d28cbf894c23ed837f11e (diff)
downloadQt-a4ffe2d274cae2510d72d04f67b42f9448282fbd.zip
Qt-a4ffe2d274cae2510d72d04f67b42f9448282fbd.tar.gz
Qt-a4ffe2d274cae2510d72d04f67b42f9448282fbd.tar.bz2
Merge branch '4.7' of scm.dev.nokia.troll.no:qt/qt-multimedia-staging into 4.7
Diffstat (limited to 'src/corelib/io/qfsfileengine_unix.cpp')
-rw-r--r--src/corelib/io/qfsfileengine_unix.cpp10
1 files changed, 10 insertions, 0 deletions
diff --git a/src/corelib/io/qfsfileengine_unix.cpp b/src/corelib/io/qfsfileengine_unix.cpp
index d2fa744..1331f54 100644
--- a/src/corelib/io/qfsfileengine_unix.cpp
+++ b/src/corelib/io/qfsfileengine_unix.cpp
@@ -668,6 +668,16 @@ bool QFSFileEnginePrivate::doStat() const
could_stat = (QT_FSTAT(QT_FILENO(fh), &st) == 0);
} else if (fd == -1) {
// ### actually covers two cases: d->fh and when the file is not open
+#if defined(Q_OS_SYMBIAN)
+ // Optimisation for Symbian where fileFlags() calls both doStat() and isSymlink(), but rarely on real links.
+ // When the filename is not a link, lstat will return the same info as stat, but this also removes
+ // any need for a further call to lstat to check if the file is a link.
+ need_lstat = false;
+ could_stat = (QT_LSTAT(nativeFilePath.constData(), &st) == 0);
+ is_link = could_stat ? S_ISLNK(st.st_mode) : false;
+ // if it turns out this was a link, we can call stat too.
+ if (is_link)
+#endif
could_stat = (QT_STAT(nativeFilePath.constData(), &st) == 0);
} else {
could_stat = (QT_FSTAT(fd, &st) == 0);