Chromium Code Reviews| OLD | NEW |
|---|---|
| (Empty) | |
| 1 // Copyright 2011 Google Inc. All Rights Reserved. | |
| 2 // Author: michaelbai@google.com (Tao Bai) | |
| 3 | |
| 4 #include "base/android/jni_array.h" | |
| 5 | |
| 6 #include "base/android/auto_jobject.h" | |
| 7 #include "base/android/jni_android.h" | |
| 8 #include "base/logging.h" | |
| 9 | |
| 10 namespace base { | |
| 11 namespace android { | |
| 12 | |
| 13 jbyteArray ToJavaByteArray(JNIEnv* env, | |
| 14 const unsigned char* bytes, | |
| 15 size_t len) { | |
| 16 jbyteArray byte_array = env->NewByteArray(len); | |
| 17 if (!byte_array) { | |
| 18 return NULL; | |
| 19 } | |
| 20 | |
| 21 jbyte* elements = env->GetByteArrayElements(byte_array, NULL); | |
| 22 DCHECK(elements); | |
| 23 memcpy(elements, bytes, len); | |
| 24 env->ReleaseByteArrayElements(byte_array, elements, 0); | |
| 25 CheckException(env); | |
| 26 | |
| 27 return byte_array; | |
| 28 } | |
| 29 | |
| 30 jobjectArray ToJavaArrayOfByteArray(JNIEnv* env, | |
| 31 const std::vector<std::string>& v) { | |
| 32 size_t count = v.size(); | |
| 33 DCHECK_GT(count, 0U); | |
| 34 jclass byte_array_class = env->FindClass("[B"); | |
| 35 jobjectArray joa = env->NewObjectArray(count, byte_array_class, NULL); | |
| 36 if (joa == NULL) | |
| 37 return NULL; | |
| 38 | |
| 39 for (size_t i = 0; i < count; ++i) { | |
| 40 AutoJObject byte_array = AutoJObject::FromLocalRef(env, ToJavaByteArray(env, | |
| 41 reinterpret_cast<const uint8*>(v[i].data()), v[i].length())); | |
|
M-A Ruel
2011/11/11 13:09:07
We never align at +8;
AutoJObject byte_array = Au
| |
| 42 if (!byte_array.obj()) { | |
| 43 env->DeleteLocalRef(joa); | |
| 44 return NULL; | |
| 45 } | |
| 46 env->SetObjectArrayElement(joa, i, byte_array.obj()); | |
| 47 } | |
| 48 return joa; | |
| 49 } | |
| 50 | |
| 51 } // namespace android | |
| 52 } // namespace base | |
| OLD | NEW |