diff options
author | Ievgenii Meshcheriakov <ievgenii.meshcheriakov@qt.io> | 2021-10-22 13:39:52 +0200 |
---|---|---|
committer | Ievgenii Meshcheriakov <ievgenii.meshcheriakov@qt.io> | 2021-12-04 01:27:08 +0100 |
commit | 56e13acf4eaaaff69156faa21d0a560fb93091d5 (patch) | |
tree | a455e0092d76561c1583e53356e4bafd690869f5 /src/corelib/io/qfsfileengine_unix.cpp | |
parent | 56bd1b76d2e81c58a80bf6b5d74219c6b1ab8499 (diff) |
QAbstractFileEngine: Add permission argument to open()
The new argument allows atomic creation of files with non-default
permissions.
Task-number: QTBUG-79750
Change-Id: I4c49455b41f924ba87148302c8d0f77f5de0832b
Reviewed-by: MÃ¥rten Nordheim <marten.nordheim@qt.io>
Diffstat (limited to 'src/corelib/io/qfsfileengine_unix.cpp')
-rw-r--r-- | src/corelib/io/qfsfileengine_unix.cpp | 14 |
1 files changed, 12 insertions, 2 deletions
diff --git a/src/corelib/io/qfsfileengine_unix.cpp b/src/corelib/io/qfsfileengine_unix.cpp index 5815d6bc9c..d071c85cb3 100644 --- a/src/corelib/io/qfsfileengine_unix.cpp +++ b/src/corelib/io/qfsfileengine_unix.cpp @@ -39,6 +39,7 @@ #include "qplatformdefs.h" #include "private/qabstractfileengine_p.h" +#include "private/qfiledevice_p.h" #include "private/qfsfileengine_p.h" #include "private/qcore_unix_p.h" #include "qfilesystementry_p.h" @@ -107,7 +108,16 @@ static inline QString msgOpenDirectory() /*! \internal */ -bool QFSFileEnginePrivate::nativeOpen(QIODevice::OpenMode openMode) +bool QFSFileEnginePrivate::nativeOpen(QIODevice::OpenMode openMode, + std::optional<QFile::Permissions> permissions) +{ + return nativeOpenImpl(openMode, permissions ? QtPrivate::toMode_t(*permissions) : 0666); +} + +/*! + \internal +*/ +bool QFSFileEnginePrivate::nativeOpenImpl(QIODevice::OpenMode openMode, mode_t mode) { Q_Q(QFSFileEngine); @@ -118,7 +128,7 @@ bool QFSFileEnginePrivate::nativeOpen(QIODevice::OpenMode openMode) // Try to open the file in unbuffered mode. do { - fd = QT_OPEN(fileEntry.nativeFilePath().constData(), flags, 0666); + fd = QT_OPEN(fileEntry.nativeFilePath().constData(), flags, mode); } while (fd == -1 && errno == EINTR); // On failure, return and report the error. |