From: Tsu Jan Date: Sun, 21 Apr 2019 19:37:07 +0000 (+0430) Subject: Workaround for GLib's recursive moving error, e.g. with bound mounts X-Git-Tag: archive/raspbian/0.14.1-9+rpi1^2~2 X-Git-Url: https://dgit.raspbian.org/?a=commitdiff_plain;h=9c10107dc61e4bb89d210628fbff855f228c9f05;p=libfm-qt.git 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 Gbp-Pq: Name workaround-glib-recursive-moving-error.patch --- diff --git a/src/core/filetransferjob.cpp b/src/core/filetransferjob.cpp index 6b44576..52cd23c 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 {