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

Commit a21fabc0 authored by Marco Nelissen's avatar Marco Nelissen Committed by Android (Google) Code Review
Browse files

Merge "Improve MTP error checking"

parents d5d08c57 dcd89eca
Loading
Loading
Loading
Loading
+42 −23
Original line number Diff line number Diff line
@@ -325,6 +325,14 @@ bool MtpServer::handleRequest() {
        mSendObjectHandle = kInvalidObjectHandle;
    }

    int containertype = mRequest.getContainerType();
    if (containertype != MTP_CONTAINER_TYPE_COMMAND) {
        ALOGE("wrong container type %d", containertype);
        return false;
    }

    ALOGV("got command %s (%x)", MtpDebug::getOperationCodeName(operation), operation);

    switch (operation) {
        case MTP_OPERATION_GET_DEVICE_INFO:
            response = doGetDeviceInfo();
@@ -415,7 +423,8 @@ bool MtpServer::handleRequest() {
            response = doEndEditObject();
            break;
        default:
            ALOGE("got unsupported command %s", MtpDebug::getOperationCodeName(operation));
            ALOGE("got unsupported command %s (%x)",
                    MtpDebug::getOperationCodeName(operation), operation);
            response = MTP_RESPONSE_OPERATION_NOT_SUPPORTED;
            break;
    }
@@ -950,9 +959,14 @@ MtpResponseCode MtpServer::doSendObject() {
    fchmod(mfr.fd, mFilePermission);
    umask(mask);

    if (initialData > 0)
    if (initialData > 0) {
        ret = write(mfr.fd, mData.getData(), initialData);
    }

    if (ret < 0) {
        ALOGE("failed to write initial data");
        result = MTP_RESPONSE_GENERAL_ERROR;
    } else {
        if (mSendObjectFileSize - initialData > 0) {
            mfr.offset = initialData;
            if (mSendObjectFileSize == 0xFFFFFFFF) {
@@ -967,6 +981,7 @@ MtpResponseCode MtpServer::doSendObject() {
            ret = ioctl(mFD, MTP_RECEIVE_FILE, (unsigned long)&mfr);
            ALOGV("MTP_RECEIVE_FILE returned %d\n", ret);
        }
    }
    close(mfr.fd);

    if (ret < 0) {
@@ -1131,6 +1146,9 @@ MtpResponseCode MtpServer::doSendPartialObject() {
        length -= initialData;
    }

    if (ret < 0) {
        ALOGE("failed to write initial data");
    } else {
        if (length > 0) {
            mtp_file_range  mfr;
            mfr.fd = edit->mFD;
@@ -1141,6 +1159,7 @@ MtpResponseCode MtpServer::doSendPartialObject() {
            ret = ioctl(mFD, MTP_RECEIVE_FILE, (unsigned long)&mfr);
            ALOGV("MTP_RECEIVE_FILE returned %d", ret);
        }
    }
    if (ret < 0) {
        mResponse.setParameter(1, 0);
        if (errno == ECANCELED)