summaryrefslogtreecommitdiffstats
path: root/src/corelib/io
diff options
context:
space:
mode:
authorBradley T. Hughes <bradley.hughes@nokia.com>2009-11-30 16:27:55 (GMT)
committerBradley T. Hughes <bradley.hughes@nokia.com>2009-11-30 16:27:55 (GMT)
commit700a069591d29733609e619c224861ca774bfb32 (patch)
tree1c2f6ceebdd02b0030efb947a566acaf14c86dc6 /src/corelib/io
parent26e5da81695f633ef0d872a530d649ae3cc4cadb (diff)
parentda3bf86ecea14a8658601803e14820a28e7470d6 (diff)
downloadQt-700a069591d29733609e619c224861ca774bfb32.zip
Qt-700a069591d29733609e619c224861ca774bfb32.tar.gz
Qt-700a069591d29733609e619c224861ca774bfb32.tar.bz2
Merge branch '4.6' of scm.dev.nokia.troll.no:qt/oslo-staging-1 into 4.6
Diffstat (limited to 'src/corelib/io')
-rw-r--r--src/corelib/io/qfsfileengine.cpp6
-rw-r--r--src/corelib/io/qfsfileengine_unix.cpp32
2 files changed, 25 insertions, 13 deletions
diff --git a/src/corelib/io/qfsfileengine.cpp b/src/corelib/io/qfsfileengine.cpp
index efc09a0..b8f6e2c 100644
--- a/src/corelib/io/qfsfileengine.cpp
+++ b/src/corelib/io/qfsfileengine.cpp
@@ -139,7 +139,11 @@ QString QFSFileEnginePrivate::canonicalized(const QString &path)
return path;
#if defined(Q_OS_UNIX) || defined(Q_OS_SYMBIAN)
- // FIXME let's see if this stuff works, then we might be able to remove some of the other code
+ // FIXME let's see if this stuff works, then we might be able to remove some of the other code.
+ // baaad Mac: 10.5 and 10.6 crash if trying to free a value returned by
+ // realpath() if the input path is just the root component.
+ if (path.size() == 1 && path.at(0) == QLatin1Char('/'))
+ return path;
char *ret = realpath(path.toLocal8Bit().constData(), (char*)0);
if (ret) {
QString canonicalPath = QDir::cleanPath(QString::fromLocal8Bit(ret));
diff --git a/src/corelib/io/qfsfileengine_unix.cpp b/src/corelib/io/qfsfileengine_unix.cpp
index 8cbf6a3..71414ce 100644
--- a/src/corelib/io/qfsfileengine_unix.cpp
+++ b/src/corelib/io/qfsfileengine_unix.cpp
@@ -191,12 +191,16 @@ bool QFSFileEnginePrivate::nativeOpen(QIODevice::OpenMode openMode)
return false;
}
- QT_STATBUF statBuf;
- if (QT_FSTAT(fd, &statBuf) != -1) {
- if ((statBuf.st_mode & S_IFMT) == S_IFDIR) {
- q->setError(QFile::OpenError, QLatin1String("file to open is a directory"));
- QT_CLOSE(fd);
- return false;
+ if (!(openMode & QIODevice::WriteOnly)) {
+ // we don't need this check if we tried to open for writing because then
+ // we had received EISDIR anyway.
+ QT_STATBUF statBuf;
+ if (QT_FSTAT(fd, &statBuf) != -1) {
+ if ((statBuf.st_mode & S_IFMT) == S_IFDIR) {
+ q->setError(QFile::OpenError, QLatin1String("file to open is a directory"));
+ QT_CLOSE(fd);
+ return false;
+ }
}
}
@@ -230,12 +234,16 @@ bool QFSFileEnginePrivate::nativeOpen(QIODevice::OpenMode openMode)
return false;
}
- QT_STATBUF statBuf;
- if (QT_FSTAT(fileno(fh), &statBuf) != -1) {
- if ((statBuf.st_mode & S_IFMT) == S_IFDIR) {
- q->setError(QFile::OpenError, QLatin1String("file to open is a directory"));
- fclose(fh);
- return false;
+ if (!(openMode & QIODevice::WriteOnly)) {
+ // we don't need this check if we tried to open for writing because then
+ // we had received EISDIR anyway.
+ QT_STATBUF statBuf;
+ if (QT_FSTAT(fileno(fh), &statBuf) != -1) {
+ if ((statBuf.st_mode & S_IFMT) == S_IFDIR) {
+ q->setError(QFile::OpenError, QLatin1String("file to open is a directory"));
+ fclose(fh);
+ return false;
+ }
}
}