diff --git a/src/jniutils.cc b/src/jniutils.cc index 7fd43be..682463e 100644 --- a/src/jniutils.cc +++ b/src/jniutils.cc @@ -169,9 +169,7 @@ namespace pEp { jboolean isCopy; size_t l = strlen(str); jbyteArray _str = env->NewByteArray(l); - jbyte *b = env->GetByteArrayElements(_str, &isCopy); - memcpy((char *)b, str, l); - env->ReleaseByteArrayElements(_str, b, 0); + env->SetByteArrayRegion(_str, 0, l, (jbyte*)str); return _str; } else if (str) { @@ -186,10 +184,10 @@ namespace pEp { if (str == NULL) return NULL; - jboolean isCopy; - jbyte *b = env->GetByteArrayElements(str, &isCopy); - char *_str = strndup((char *)b, (size_t)env->GetArrayLength(str)); - env->ReleaseByteArrayElements(str, b, JNI_ABORT); + size_t l = env->GetArrayLength(str); + char *_str = (char *) calloc(1,l+1); + assert(_str); + env->GetByteArrayRegion(str, 0, l, (jbyte*)_str); return _str; } @@ -488,12 +486,8 @@ namespace pEp { jobject obj = env->NewObject(clazz, constructor); jfieldID fieldID = getFieldID(env, classname, "data", "[B"); - jboolean isCopy; jbyteArray _data = env->NewByteArray((jsize) b->size); - jbyte *_b = env->GetByteArrayElements(_data, &isCopy); - memcpy((char *)_b, b->value, b->size); - env->ReleaseByteArrayElements(_data, _b, 0); - + env->SetByteArrayRegion(_data, 0, b->size, (jbyte*)b->value); env->SetObjectField(obj, fieldID, reinterpret_cast(_data)); _setStringField(env, classname, obj, "mime_type", b->mime_type); @@ -554,10 +548,7 @@ namespace pEp { char *b = (char *) malloc(size); assert(b); - jboolean isCopy; - jbyte *_b = env->GetByteArrayElements(_data, &isCopy); - memcpy(b, _b, size); - env->ReleaseByteArrayElements(_data, _b, JNI_ABORT); + env->GetByteArrayRegion(_data, 0, size, (jbyte*)b); _bl = bloblist_add(_bl, b, size, mime_type, filename);