mtp: Preserve last modified time of files.
Bug: 6325175
Test: Transfer files
Change-Id: I54af3205575f2bb83c732bb70907f60e0b785e91
Signed-off-by: caozhiyuan <cao.zhiyuan@zte.com.cn>
diff --git a/media/mtp/MtpServer.cpp b/media/mtp/MtpServer.cpp
index b4947f8..b773e8a 100644
--- a/media/mtp/MtpServer.cpp
+++ b/media/mtp/MtpServer.cpp
@@ -25,6 +25,7 @@
#include <sys/types.h>
#include <sys/stat.h>
#include <sys/stat.h>
+#include <sys/time.h>
#define LOG_TAG "MtpServer"
@@ -113,7 +114,8 @@
mSessionOpen(false),
mSendObjectHandle(kInvalidObjectHandle),
mSendObjectFormat(0),
- mSendObjectFileSize(0)
+ mSendObjectFileSize(0),
+ mSendObjectModifiedTime(0)
{
}
@@ -999,6 +1001,7 @@
// save the handle for the SendObject call, which should follow
mSendObjectHandle = handle;
mSendObjectFormat = format;
+ mSendObjectModifiedTime = modifiedTime;
}
mResponse.setParameter(1, storageID);
@@ -1072,6 +1075,17 @@
}
}
}
+
+ if (mSendObjectModifiedTime) {
+ struct timespec newTime[2];
+ newTime[0].tv_nsec = UTIME_NOW;
+ newTime[1].tv_sec = mSendObjectModifiedTime;
+ newTime[1].tv_nsec = 0;
+ if (futimens(mfr.fd, newTime) < 0) {
+ ALOGW("changing modified time failed, %s", strerror(errno));
+ }
+ }
+
fstat(mfr.fd, &sstat);
close(mfr.fd);
@@ -1092,6 +1106,7 @@
result == MTP_RESPONSE_OK);
mSendObjectHandle = kInvalidObjectHandle;
mSendObjectFormat = 0;
+ mSendObjectModifiedTime = 0;
auto end = std::chrono::steady_clock::now();
std::chrono::duration<double> diff = end - start;