Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 854cb174 authored by caozhiyuan's avatar caozhiyuan Committed by Jerry Zhang
Browse files

mtp: Preserve last modified time of files.



Bug: 6325175
Test: Transfer files
Change-Id: I54af3205575f2bb83c732bb70907f60e0b785e91
Signed-off-by: default avatarcaozhiyuan <cao.zhiyuan@zte.com.cn>
parent 94d15f9c
Loading
Loading
Loading
Loading
+16 −1
Original line number Diff line number Diff line
@@ -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 @@ MtpServer::MtpServer(MtpDatabase* database, bool ptp,
        mSessionOpen(false),
        mSendObjectHandle(kInvalidObjectHandle),
        mSendObjectFormat(0),
        mSendObjectFileSize(0)
        mSendObjectFileSize(0),
        mSendObjectModifiedTime(0)
{
}

@@ -999,6 +1001,7 @@ MtpResponseCode MtpServer::doSendObjectInfo() {
        // save the handle for the SendObject call, which should follow
        mSendObjectHandle = handle;
        mSendObjectFormat = format;
        mSendObjectModifiedTime = modifiedTime;
    }

    mResponse.setParameter(1, storageID);
@@ -1072,6 +1075,17 @@ MtpResponseCode MtpServer::doSendObject() {
            }
        }
    }

    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 @@ done:
            result == MTP_RESPONSE_OK);
    mSendObjectHandle = kInvalidObjectHandle;
    mSendObjectFormat = 0;
    mSendObjectModifiedTime = 0;

    auto end = std::chrono::steady_clock::now();
    std::chrono::duration<double> diff = end - start;
+1 −0
Original line number Diff line number Diff line
@@ -78,6 +78,7 @@ private:
    MtpObjectFormat     mSendObjectFormat;
    MtpString           mSendObjectFilePath;
    size_t              mSendObjectFileSize;
    time_t              mSendObjectModifiedTime;

    Mutex               mMutex;