1From 53fb739f85f89c2b2b94f50ecac476270867c1ee Mon Sep 17 00:00:00 2001
2From: Zain Wang <wzz@rock-chips.com>
3Date: Fri, 18 Sep 2020 17:30:07 +0800
4Subject: [PATCH] MtpServer: fix doMoveFile with wrong newFilePath
5
6Signed-off-by: Zain Wang <wzz@rock-chips.com>
7---
8 src/MtpServer.cpp | 21 +++++++++++++++++++--
9 1 file changed, 19 insertions(+), 2 deletions(-)
10
11diff --git a/src/MtpServer.cpp b/src/MtpServer.cpp
12index ba95c5a..fb73ac3 100644
13--- a/src/MtpServer.cpp
14+++ b/src/MtpServer.cpp
15@@ -1190,14 +1190,31 @@ MtpResponseCode MtpServer::doMoveObject() {
16     if (!hasStorage())
17         return MTP_RESPONSE_INVALID_OBJECT_HANDLE;
18     MtpObjectHandle handle = mRequest.getParameter(1);
19-    MtpObjectFormat format = mRequest.getParameter(2);
20+    MtpStorageID id = mRequest.getParameter(2);
21     MtpObjectHandle newparent = mRequest.getParameter(3);
22+    MtpObjectFormat format;
23
24     MtpString filePath;
25     MtpString newPath;
26     int64_t fileLength;
27     int result = mDatabase->getObjectFilePath(handle, filePath, fileLength, format);
28-    result = mDatabase->getObjectFilePath(handle, newPath, fileLength, format);
29+
30+    if (newparent == 0)
31+        newPath = getStorage(id)->getPath();
32+    else
33+        result = mDatabase->getObjectFilePath(newparent, newPath, fileLength, format);
34+
35+    if (newPath.at(newPath.size() - 1) != '/')
36+        newPath.append("/");
37+
38+
39+    for (int i = filePath.size() - 2; i >= 0; i--) {
40+        if (filePath.at(i) == '/') {
41+            newPath.append(&filePath.c_str()[i + 1]);
42+            break;
43+        }
44+    }
45+
46     if (result == MTP_RESPONSE_OK) {
47         VLOG(2) << "moving " << filePath.c_str() << " to " << newPath.c_str();
48         result = mDatabase->moveFile(handle, newparent);
49--
502.17.1
51
52