diff options
Diffstat (limited to 'src/corelib/io/qfsfileengine_unix.cpp')
-rw-r--r-- | src/corelib/io/qfsfileengine_unix.cpp | 22 |
1 files changed, 13 insertions, 9 deletions
diff --git a/src/corelib/io/qfsfileengine_unix.cpp b/src/corelib/io/qfsfileengine_unix.cpp index a127b76fcc..fb08385c91 100644 --- a/src/corelib/io/qfsfileengine_unix.cpp +++ b/src/corelib/io/qfsfileengine_unix.cpp @@ -115,14 +115,14 @@ bool QFSFileEnginePrivate::nativeOpenImpl(QIODevice::OpenMode openMode, mode_t m // Seek to the end when in Append mode. if (flags & QFile::Append) { - int ret; + QT_OFF_T ret; do { ret = QT_LSEEK(fd, 0, SEEK_END); } while (ret == -1 && errno == EINTR); if (ret == -1) { q->setError(errno == EMFILE ? QFile::ResourceError : QFile::OpenError, - qt_error_string(int(errno))); + qt_error_string(errno)); return false; } } @@ -221,7 +221,7 @@ qint64 QFSFileEnginePrivate::nativeRead(char *data, qint64 len) } if (readBytes == 0 && !feof(fh)) { // if we didn't read anything and we're not at EOF, it must be an error - q->setError(QFile::ReadError, qt_error_string(int(errno))); + q->setError(QFile::ReadError, qt_error_string(errno)); return -1; } return readBytes; @@ -489,6 +489,10 @@ bool QFSFileEngine::setPermissions(uint perms) Q_D(QFSFileEngine); QSystemError error; bool ok; + + // clear cached state (if any) + d->metaData.clearFlags(QFileSystemMetaData::Permissions); + if (d->fd != -1) ok = QFileSystemEngine::setPermissions(d->fd, QFile::Permissions(perms), error); else @@ -550,13 +554,13 @@ uchar *QFSFileEnginePrivate::map(qint64 offset, qint64 size, QFile::MemoryMapFla Q_Q(QFSFileEngine); if (openMode == QIODevice::NotOpen) { - q->setError(QFile::PermissionsError, qt_error_string(int(EACCES))); + q->setError(QFile::PermissionsError, qt_error_string(EACCES)); return nullptr; } if (offset < 0 || offset > maxFileOffset || size < 0 || quint64(size) > quint64(size_t(-1))) { - q->setError(QFile::UnspecifiedError, qt_error_string(int(EINVAL))); + q->setError(QFile::UnspecifiedError, qt_error_string(EINVAL)); return nullptr; } @@ -584,7 +588,7 @@ uchar *QFSFileEnginePrivate::map(qint64 offset, qint64 size, QFile::MemoryMapFla int extra = offset % pageSize; if (quint64(size + extra) > quint64((size_t)-1)) { - q->setError(QFile::UnspecifiedError, qt_error_string(int(EINVAL))); + q->setError(QFile::UnspecifiedError, qt_error_string(EINVAL)); return nullptr; } @@ -602,16 +606,16 @@ uchar *QFSFileEnginePrivate::map(qint64 offset, qint64 size, QFile::MemoryMapFla switch(errno) { case EBADF: - q->setError(QFile::PermissionsError, qt_error_string(int(EACCES))); + q->setError(QFile::PermissionsError, qt_error_string(EACCES)); break; case ENFILE: case ENOMEM: - q->setError(QFile::ResourceError, qt_error_string(int(errno))); + q->setError(QFile::ResourceError, qt_error_string(errno)); break; case EINVAL: // size are out of bounds default: - q->setError(QFile::UnspecifiedError, qt_error_string(int(errno))); + q->setError(QFile::UnspecifiedError, qt_error_string(errno)); break; } return nullptr; |