summaryrefslogtreecommitdiffstats
path: root/src/corelib/io
diff options
context:
space:
mode:
authorIevgenii Meshcheriakov <ievgenii.meshcheriakov@qt.io>2021-10-26 14:52:36 +0200
committerIevgenii Meshcheriakov <ievgenii.meshcheriakov@qt.io>2021-11-10 18:22:07 +0100
commit1cc9ac71ac1b433eba65e75413bca57380f0e6b9 (patch)
tree9816b5f09452d09e63fc62d5c85cc25b010b04f0 /src/corelib/io
parent7db0eeae3411ad27eab47db57f7121567bf0c839 (diff)
Move toMode_t() from qfilesystemengine_unix.cpp to qfiledevice_p.h
The function is needed in multiple files to implement QDir::mkdir() and QFile::open() methods that accept a permission argument on Unix. Task-number: QTBUG-79750 Change-Id: Ib0853f7d12bcb5d6f1116b43ec1aa07b6554bb93 Reviewed-by: Edward Welbourne <edward.welbourne@qt.io> Reviewed-by: Thiago Macieira <thiago.macieira@intel.com>
Diffstat (limited to 'src/corelib/io')
-rw-r--r--src/corelib/io/qfiledevice_p.h34
-rw-r--r--src/corelib/io/qfilesystemengine_unix.cpp31
2 files changed, 37 insertions, 28 deletions
diff --git a/src/corelib/io/qfiledevice_p.h b/src/corelib/io/qfiledevice_p.h
index aef3fca811..9adba680d7 100644
--- a/src/corelib/io/qfiledevice_p.h
+++ b/src/corelib/io/qfiledevice_p.h
@@ -54,6 +54,10 @@
#include "private/qiodevice_p.h"
#include <memory>
+#ifdef Q_OS_UNIX
+# include <sys/types.h> // for mode_t
+# include <sys/stat.h> // for mode_t constants
+#endif
QT_BEGIN_NAMESPACE
@@ -98,6 +102,36 @@ inline bool QFileDevicePrivate::ensureFlushed() const
return true;
}
+#ifdef Q_OS_UNIX
+namespace QtPrivate {
+
+constexpr mode_t toMode_t(QFileDevice::Permissions permissions)
+{
+ mode_t mode = 0;
+ if (permissions & (QFileDevice::ReadOwner | QFileDevice::ReadUser))
+ mode |= S_IRUSR;
+ if (permissions & (QFileDevice::WriteOwner | QFileDevice::WriteUser))
+ mode |= S_IWUSR;
+ if (permissions & (QFileDevice::ExeOwner | QFileDevice::ExeUser))
+ mode |= S_IXUSR;
+ if (permissions & QFileDevice::ReadGroup)
+ mode |= S_IRGRP;
+ if (permissions & QFileDevice::WriteGroup)
+ mode |= S_IWGRP;
+ if (permissions & QFileDevice::ExeGroup)
+ mode |= S_IXGRP;
+ if (permissions & QFileDevice::ReadOther)
+ mode |= S_IROTH;
+ if (permissions & QFileDevice::WriteOther)
+ mode |= S_IWOTH;
+ if (permissions & QFileDevice::ExeOther)
+ mode |= S_IXOTH;
+ return mode;
+}
+
+} // namespace QtPrivate
+#endif // Q_OS_UNIX
+
QT_END_NAMESPACE
#endif // QFILEDEVICE_P_H
diff --git a/src/corelib/io/qfilesystemengine_unix.cpp b/src/corelib/io/qfilesystemengine_unix.cpp
index 054e9ed2fe..8c2df84b72 100644
--- a/src/corelib/io/qfilesystemengine_unix.cpp
+++ b/src/corelib/io/qfilesystemengine_unix.cpp
@@ -46,6 +46,7 @@
#include <QtCore/qoperatingsystemversion.h>
#include <QtCore/private/qcore_unix_p.h>
+#include <QtCore/private/qfiledevice_p.h>
#include <QtCore/qvarlengtharray.h>
#ifndef QT_BOOTSTRAPPED
# include <QtCore/qstandardpaths.h>
@@ -53,8 +54,6 @@
#include <pwd.h>
#include <stdlib.h> // for realpath()
-#include <sys/types.h>
-#include <sys/stat.h>
#include <unistd.h>
#include <stdio.h>
#include <errno.h>
@@ -1527,36 +1526,12 @@ bool QFileSystemEngine::removeFile(const QFileSystemEntry &entry, QSystemError &
}
-static mode_t toMode_t(QFile::Permissions permissions)
-{
- mode_t mode = 0;
- if (permissions & (QFile::ReadOwner | QFile::ReadUser))
- mode |= S_IRUSR;
- if (permissions & (QFile::WriteOwner | QFile::WriteUser))
- mode |= S_IWUSR;
- if (permissions & (QFile::ExeOwner | QFile::ExeUser))
- mode |= S_IXUSR;
- if (permissions & QFile::ReadGroup)
- mode |= S_IRGRP;
- if (permissions & QFile::WriteGroup)
- mode |= S_IWGRP;
- if (permissions & QFile::ExeGroup)
- mode |= S_IXGRP;
- if (permissions & QFile::ReadOther)
- mode |= S_IROTH;
- if (permissions & QFile::WriteOther)
- mode |= S_IWOTH;
- if (permissions & QFile::ExeOther)
- mode |= S_IXOTH;
- return mode;
-}
-
//static
bool QFileSystemEngine::setPermissions(const QFileSystemEntry &entry, QFile::Permissions permissions, QSystemError &error, QFileSystemMetaData *data)
{
Q_CHECK_FILE_NAME(entry, false);
- mode_t mode = toMode_t(permissions);
+ mode_t mode = QtPrivate::toMode_t(permissions);
bool success = ::chmod(entry.nativeFilePath().constData(), mode) == 0;
if (success && data) {
data->entryFlags &= ~QFileSystemMetaData::Permissions;
@@ -1571,7 +1546,7 @@ bool QFileSystemEngine::setPermissions(const QFileSystemEntry &entry, QFile::Per
//static
bool QFileSystemEngine::setPermissions(int fd, QFile::Permissions permissions, QSystemError &error, QFileSystemMetaData *data)
{
- mode_t mode = toMode_t(permissions);
+ mode_t mode = QtPrivate::toMode_t(permissions);
bool success = ::fchmod(fd, mode) == 0;
if (success && data) {