diff options
-rw-r--r-- | base/android/jni_array.cc | 15 |
1 files changed, 6 insertions, 9 deletions
diff --git a/base/android/jni_array.cc b/base/android/jni_array.cc index 0b2b67f..96c5980 100644 --- a/base/android/jni_array.cc +++ b/base/android/jni_array.cc @@ -17,9 +17,8 @@ ScopedJavaLocalRef<jbyteArray> ToJavaByteArray( CheckException(env); DCHECK(byte_array); - jbyte* elements = env->GetByteArrayElements(byte_array, NULL); - memcpy(elements, bytes, len); - env->ReleaseByteArrayElements(byte_array, elements, 0); + env->SetByteArrayRegion( + byte_array, 0, len, reinterpret_cast<const jbyte*>(bytes)); CheckException(env); return ScopedJavaLocalRef<jbyteArray>(env, byte_array); @@ -31,9 +30,8 @@ ScopedJavaLocalRef<jintArray> ToJavaIntArray( CheckException(env); DCHECK(int_array); - jint* elements = env->GetIntArrayElements(int_array, NULL); - memcpy(elements, ints, len * sizeof(*ints)); - env->ReleaseIntArrayElements(int_array, elements, 0); + env->SetIntArrayRegion( + int_array, 0, len, reinterpret_cast<const jint*>(ints)); CheckException(env); return ScopedJavaLocalRef<jintArray>(env, int_array); @@ -50,9 +48,8 @@ ScopedJavaLocalRef<jlongArray> ToJavaLongArray( CheckException(env); DCHECK(long_array); - jlong* elements = env->GetLongArrayElements(long_array, NULL); - memcpy(elements, longs, len * sizeof(*longs)); - env->ReleaseLongArrayElements(long_array, elements, 0); + env->SetLongArrayRegion( + long_array, 0, len, reinterpret_cast<const jlong*>(longs)); CheckException(env); return ScopedJavaLocalRef<jlongArray>(env, long_array); |