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