diff options
| -rw-r--r-- | core/jni/android_hardware_UsbDeviceConnection.cpp | 16 |
1 files changed, 6 insertions, 10 deletions
diff --git a/core/jni/android_hardware_UsbDeviceConnection.cpp b/core/jni/android_hardware_UsbDeviceConnection.cpp index 7267eb8cb3dc..a0228428e90e 100644 --- a/core/jni/android_hardware_UsbDeviceConnection.cpp +++ b/core/jni/android_hardware_UsbDeviceConnection.cpp @@ -190,21 +190,17 @@ android_hardware_UsbDeviceConnection_bulk_request(JNIEnv *env, jobject thiz, return -1; } - bool is_dir_in = (endpoint & USB_ENDPOINT_DIR_MASK) == USB_DIR_IN; - jbyte *bufferBytes = (jbyte *)malloc(length); - - if (!is_dir_in && buffer) { - env->GetByteArrayRegion(buffer, start, length, bufferBytes); + jbyte* bufferBytes = NULL; + if (buffer) { + bufferBytes = (jbyte*)env->GetPrimitiveArrayCritical(buffer, NULL); } - jint result = usb_device_bulk_transfer(device, endpoint, bufferBytes, length, timeout); + jint result = usb_device_bulk_transfer(device, endpoint, bufferBytes + start, length, timeout); - if (is_dir_in && buffer) { - env->SetByteArrayRegion(buffer, start, length, bufferBytes); + if (bufferBytes) { + env->ReleasePrimitiveArrayCritical(buffer, bufferBytes, 0); } - free(bufferBytes); - return result; } |