summaryrefslogtreecommitdiffstats
path: root/src/libs/installer/fileutils.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/libs/installer/fileutils.cpp')
-rw-r--r--src/libs/installer/fileutils.cpp37
1 files changed, 37 insertions, 0 deletions
diff --git a/src/libs/installer/fileutils.cpp b/src/libs/installer/fileutils.cpp
index 18c5f90fd..b000247e6 100644
--- a/src/libs/installer/fileutils.cpp
+++ b/src/libs/installer/fileutils.cpp
@@ -293,6 +293,43 @@ void QInstaller::removeSystemGeneratedFiles(const QString &path)
#endif
}
+/*!
+ Sets permissions of file or directory specified by \a fileName to \c 644 or \c 755
+ based by the value of \a permissions.
+*/
+bool QInstaller::setDefaultFilePermissions(const QString &fileName, DefaultFilePermissions permissions)
+{
+ QFile file(fileName);
+ return setDefaultFilePermissions(&file, permissions);
+}
+
+/*!
+ Sets permissions of file or directory specified by \a file to \c 644 or \c 755
+ based by the value of \a permissions. This is effective only on Unix platforms
+ as \c setPermissions() does not manipulate ACLs. On Windows this does nothing
+ and always returns \c true.
+*/
+bool QInstaller::setDefaultFilePermissions(QFile *file, DefaultFilePermissions permissions)
+{
+#ifdef Q_OS_UNIX
+ if (!file->exists()) {
+ qWarning() << "Target" << file->fileName() << "does not exists.";
+ return false;
+ }
+ if (file->permissions() == static_cast<QFileDevice::Permission>(permissions))
+ return true;
+
+ if (!file->setPermissions(static_cast<QFileDevice::Permission>(permissions))) {
+ qWarning() << "Cannot set default permissions for target"
+ << file->fileName() << ":" << file->errorString();
+ return false;
+ }
+ return true;
+#else
+ return true;
+#endif
+}
+
void QInstaller::copyDirectoryContents(const QString &sourceDir, const QString &targetDir)
{
Q_ASSERT(QFileInfo(sourceDir).isDir());