From 476dded99de11a57c64103b4610f0de3dbdbc769 Mon Sep 17 00:00:00 2001 From: Tsu Jan Date: Mon, 22 Apr 2019 00:07:07 +0430 Subject: [PATCH] Workaround for GLib's recursive moving error, e.g. with bound mounts `g_file_move()` may not work recursively on the same filesystem, especially with bound mounts (to `/mnt`, for example) and give the `G_IO_ERROR_WOULD_RECURSE` error. This patch ignores the error and tries our `FileTransferJob::copyFile()`. Closes https://github.com/lxqt/pcmanfm-qt/issues/943 --- src/core/filetransferjob.cpp | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/src/core/filetransferjob.cpp b/src/core/filetransferjob.cpp index c3d5851..32f0f89 100644 --- a/src/core/filetransferjob.cpp +++ b/src/core/filetransferjob.cpp @@ -83,6 +83,13 @@ bool FileTransferJob::moveFileSameFs(const FilePath& srcPath, const GFileInfoPtr // do the file operation if(!g_file_move(srcPath.gfile().get(), destPath.gfile().get(), GFileCopyFlags(flags), cancellable().get(), nullptr, this, &err)) { + // Specially with mounts bound to /mnt, g_file_move() may give the recursive error + // and fail, in which case, we ignore the error and try copying and deleting. + if(err.code() == G_IO_ERROR_WOULD_RECURSE) { + if(auto parent = destPath.parent()) { + return copyFile(srcPath, srcInfo, parent, destPath.baseName().get()); + } + } retry = handleError(err, srcPath, srcInfo, destPath, flags); } else {