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

Commit 4aeb1200 authored by Viktor Martensson's avatar Viktor Martensson Committed by Automerger Merge Worker
Browse files

Merge "usb: Use Get/SetByteArrayRegion in controlTransfer" into main am: 3d7b11b6

parents 6a880e0f 3d7b11b6
Loading
Loading
Loading
Loading
+14 −8
Original line number Original line Diff line number Diff line
@@ -165,19 +165,25 @@ android_hardware_UsbDeviceConnection_control_request(JNIEnv *env, jobject thiz,
        return -1;
        return -1;
    }
    }


    jbyte* bufferBytes = NULL;
    bool is_dir_in = (requestType & USB_ENDPOINT_DIR_MASK) == USB_DIR_IN;
    if (buffer) {
    std::unique_ptr<jbyte[]> bufferBytes(new (std::nothrow) jbyte[length]);
        bufferBytes = (jbyte*)env->GetPrimitiveArrayCritical(buffer, NULL);
    if (!bufferBytes) {
        jniThrowException(env, "java/lang/OutOfMemoryError", NULL);
        return -1;
    }

    if (!is_dir_in && buffer) {
        env->GetByteArrayRegion(buffer, start, length, bufferBytes.get());
    }
    }


    jint result = usb_device_control_transfer(device, requestType, request,
    jint bytes_transferred = usb_device_control_transfer(device, requestType, request,
            value, index, bufferBytes + start, length, timeout);
            value, index, bufferBytes.get(), length, timeout);


    if (bufferBytes) {
    if (bytes_transferred > 0 && is_dir_in) {
        env->ReleasePrimitiveArrayCritical(buffer, bufferBytes, 0);
        env->SetByteArrayRegion(buffer, start, bytes_transferred, bufferBytes.get());
    }
    }


    return result;
    return bytes_transferred;
}
}


static jint
static jint