Skip to content

Commit

Permalink
Wrap all use of std::filesystem in ifdefs to fix legacy build for <ma…
Browse files Browse the repository at this point in the history
…cOS 10.15

Signed-off-by: Claudio Cambra <[email protected]>
  • Loading branch information
claucambra committed Mar 26, 2024
1 parent 5c2bd3c commit 32e2d75
Show file tree
Hide file tree
Showing 6 changed files with 30 additions and 2 deletions.
5 changes: 4 additions & 1 deletion src/libsync/filesystem.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -194,6 +194,7 @@ bool FileSystem::getInode(const QString &filename, quint64 *inode)
return false;
}

#if !defined(Q_OS_MACOS) || __MAC_OS_X_VERSION_MIN_REQUIRED >= MAC_OS_X_VERSION_10_15
bool FileSystem::setFolderPermissions(const QString &path,

Check warning on line 198 in src/libsync/filesystem.cpp

View workflow job for this annotation

GitHub Actions / build

src/libsync/filesystem.cpp:198:18 [modernize-use-trailing-return-type]

use a trailing return type for this function

Check warning on line 198 in src/libsync/filesystem.cpp

View workflow job for this annotation

GitHub Actions / build

src/libsync/filesystem.cpp:198:39 [bugprone-easily-swappable-parameters]

2 adjacent parameters of 'setFolderPermissions' of similar type are easily swapped by mistake
FileSystem::FolderPermissions permissions) noexcept
{
Expand Down Expand Up @@ -330,6 +331,7 @@ bool FileSystem::setFolderPermissions(const QString &path,
}
#endif

#if !defined(Q_OS_MACOS) || __MAC_OS_X_VERSION_MIN_REQUIRED >= MAC_OS_X_VERSION_10_15

Check warning on line 334 in src/libsync/filesystem.cpp

View workflow job for this annotation

GitHub Actions / build

src/libsync/filesystem.cpp:334:2 [readability-redundant-preprocessor]

nested redundant #if; consider removing it
try {
switch (permissions) {
case OCC::FileSystem::FolderPermissions::ReadOnly:
Expand All @@ -344,6 +346,7 @@ bool FileSystem::setFolderPermissions(const QString &path,
qCWarning(lcFileSystem()) << "exception when modifying folder permissions" << e.what() << e.path1().c_str() << e.path2().c_str();
return false;
}
#endif

return true;
}
Expand All @@ -361,6 +364,6 @@ bool FileSystem::isFolderReadOnly(const std::filesystem::path &path) noexcept
return false;
}
}

#endif

} // namespace OCC
4 changes: 4 additions & 0 deletions src/libsync/filesystem.h
Original file line number Diff line number Diff line change
Expand Up @@ -23,7 +23,9 @@

#include <ctime>
#include <functional>
#if !defined(Q_OS_MACOS) || __MAC_OS_X_VERSION_MIN_REQUIRED >= MAC_OS_X_VERSION_10_15
#include <filesystem>
#endif

class QFile;

Expand Down Expand Up @@ -101,7 +103,9 @@ namespace FileSystem {
bool OWNCLOUDSYNC_EXPORT setFolderPermissions(const QString &path,
FileSystem::FolderPermissions permissions) noexcept;

#if !defined(Q_OS_MACOS) || __MAC_OS_X_VERSION_MIN_REQUIRED >= MAC_OS_X_VERSION_10_15
bool OWNCLOUDSYNC_EXPORT isFolderReadOnly(const std::filesystem::path &path) noexcept;
#endif
}

/** @} */
Expand Down
2 changes: 2 additions & 0 deletions src/libsync/owncloudpropagator.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -1443,6 +1443,7 @@ void PropagateDirectory::slotSubJobsFinished(SyncFileItem::Status status)
|| _item->_instruction == CSYNC_INSTRUCTION_NEW
|| _item->_instruction == CSYNC_INSTRUCTION_UPDATE_METADATA) {

#if !defined(Q_OS_MACOS) || __MAC_OS_X_VERSION_MIN_REQUIRED >= MAC_OS_X_VERSION_10_15
if (!_item->_remotePerm.isNull() &&
!_item->_remotePerm.hasPermission(RemotePermissions::CanAddFile) &&
!_item->_remotePerm.hasPermission(RemotePermissions::CanRename) &&
Expand Down Expand Up @@ -1494,6 +1495,7 @@ void PropagateDirectory::slotSubJobsFinished(SyncFileItem::Status status)
_item->_errorString = tr("The folder %1 cannot be made read-only: %2").arg(e.path1().c_str(), e.what());
}
}
#endif

const auto result = propagator()->updateMetadata(*_item);
if (!result) {
Expand Down
4 changes: 4 additions & 0 deletions src/libsync/propagatedownload.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -673,6 +673,7 @@ void PropagateDownloadFile::startDownload()
FileSystem::setFileReadOnly(_tmpFile.fileName(), false);
}

#if !defined(Q_OS_MACOS) || __MAC_OS_X_VERSION_MIN_REQUIRED >= MAC_OS_X_VERSION_10_15
try {
const auto newDirPath = std::filesystem::path{_tmpFile.fileName().toStdWString()};
Q_ASSERT(newDirPath.has_parent_path());
Expand All @@ -688,6 +689,7 @@ void PropagateDownloadFile::startDownload()
emit propagator()->touchedFile(QString::fromStdWString(_parentPath.wstring()));
_needParentFolderRestorePermissions = true;
}
#endif

if (!_tmpFile.open(QIODevice::Append | QIODevice::Unbuffered)) {
qCWarning(lcPropagateDownload) << "could not open temporary file" << _tmpFile.fileName();
Expand Down Expand Up @@ -1287,11 +1289,13 @@ void PropagateDownloadFile::downloadFinished()
return;
}

#if !defined(Q_OS_MACOS) || __MAC_OS_X_VERSION_MIN_REQUIRED >= MAC_OS_X_VERSION_10_15
if (_needParentFolderRestorePermissions) {
FileSystem::setFolderPermissions(QString::fromStdWString(_parentPath.wstring()), FileSystem::FolderPermissions::ReadWrite);
emit propagator()->touchedFile(QString::fromStdWString(_parentPath.wstring()));
_needParentFolderRestorePermissions = false;
}
#endif

FileSystem::setFileHidden(filename, false);

Expand Down
4 changes: 4 additions & 0 deletions src/libsync/propagatedownload.h
Original file line number Diff line number Diff line change
Expand Up @@ -23,7 +23,9 @@
#include <QBuffer>
#include <QFile>

#if !defined(Q_OS_MACOS) || __MAC_OS_X_VERSION_MIN_REQUIRED >= MAC_OS_X_VERSION_10_15
#include <filesystem>
#endif

namespace OCC {
class PropagateDownloadEncrypted;
Expand Down Expand Up @@ -263,7 +265,9 @@ private slots:

PropagateDownloadEncrypted *_downloadEncryptedHelper = nullptr;

#if !defined(Q_OS_MACOS) || __MAC_OS_X_VERSION_MIN_REQUIRED >= MAC_OS_X_VERSION_10_15
std::filesystem::path _parentPath;
#endif
bool _needParentFolderRestorePermissions = false;
};
}
13 changes: 12 additions & 1 deletion src/libsync/propagatorjobs.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -32,7 +32,9 @@
#include <qstack.h>
#include <QCoreApplication>

#if !defined(Q_OS_MACOS) || __MAC_OS_X_VERSION_MIN_REQUIRED >= MAC_OS_X_VERSION_10_15
#include <filesystem>
#endif
#include <ctime>


Expand Down Expand Up @@ -184,6 +186,7 @@ void PropagateLocalMkdir::startLocalMkdir()
return;
}

#if !defined(Q_OS_MACOS) || __MAC_OS_X_VERSION_MIN_REQUIRED >= MAC_OS_X_VERSION_10_15
auto parentFolderPath = std::filesystem::path{};
auto parentNeedRollbackPermissions = false;
try {
Expand All @@ -200,6 +203,7 @@ void PropagateLocalMkdir::startLocalMkdir()
{
qCWarning(lcPropagateLocalMkdir) << "exception when checking parent folder access rights" << e.what() << e.path1().c_str() << e.path2().c_str();
}
#endif

emit propagator()->touchedFile(newDirStr);
QDir localDir(propagator()->localPath());
Expand All @@ -208,6 +212,7 @@ void PropagateLocalMkdir::startLocalMkdir()
return;
}

#if !defined(Q_OS_MACOS) || __MAC_OS_X_VERSION_MIN_REQUIRED >= MAC_OS_X_VERSION_10_15
if (!_item->_remotePerm.isNull() &&
!_item->_remotePerm.hasPermission(RemotePermissions::CanAddFile) &&
!_item->_remotePerm.hasPermission(RemotePermissions::CanRename) &&
Expand All @@ -234,6 +239,7 @@ void PropagateLocalMkdir::startLocalMkdir()
{
qCWarning(lcPropagateLocalMkdir) << "exception when checking parent folder access rights" << e.what() << e.path1().c_str() << e.path2().c_str();
}
#endif

// Insert the directory into the database. The correct etag will be set later,
// once all contents have been propagated, because should_update_metadata is true.
Expand Down Expand Up @@ -304,6 +310,7 @@ void PropagateLocalRename::start()
return;
}

#if !defined(Q_OS_MACOS) || __MAC_OS_X_VERSION_MIN_REQUIRED >= MAC_OS_X_VERSION_10_15
auto targetParentFolderPath = std::filesystem::path{};
auto targetParentFolderWasReadOnly = false;
try {
Expand Down Expand Up @@ -348,27 +355,31 @@ void PropagateLocalRename::start()
qCWarning(lcPropagateLocalRename) << "exception when checking parent folder access rights" << e.what() << e.path1().c_str() << e.path2().c_str();
}
};
#endif

emit propagator()->touchedFile(existingFile);
emit propagator()->touchedFile(targetFile);
if (QString renameError; !FileSystem::rename(existingFile, targetFile, &renameError)) {
#if !defined(Q_OS_MACOS) || __MAC_OS_X_VERSION_MIN_REQUIRED >= MAC_OS_X_VERSION_10_15
if (targetParentFolderWasReadOnly) {
restoreTargetPermissions(targetParentFolderPath);
}
if (originParentFolderWasReadOnly) {
restoreTargetPermissions(originParentFolderPath);
}

#endif
done(SyncFileItem::NormalError, renameError, ErrorCategory::GenericError);
return;
}

#if !defined(Q_OS_MACOS) || __MAC_OS_X_VERSION_MIN_REQUIRED >= MAC_OS_X_VERSION_10_15
if (targetParentFolderWasReadOnly) {
restoreTargetPermissions(targetParentFolderPath);
}
if (originParentFolderWasReadOnly) {
restoreTargetPermissions(originParentFolderPath);
}
#endif
}

SyncJournalFileRecord oldRecord;
Expand Down

0 comments on commit 32e2d75

Please sign in to comment.