diff options
Diffstat (limited to 'src/libs/installer/fileutils.cpp')
-rw-r--r-- | src/libs/installer/fileutils.cpp | 37 |
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()); |