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