HYL_OK3568_LINUX/buildroot/package/mtp/0008-MtpServer-fix-doMoveFile-with-wrong-newFilePath.patch
2025-05-10 21:49:39 +08:00

52 lines
1.7 KiB
Diff

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