diff options
Diffstat (limited to 'subversion/bindings/javahl/native/JNIByteArray.cpp')
-rw-r--r-- | subversion/bindings/javahl/native/JNIByteArray.cpp | 30 |
1 files changed, 12 insertions, 18 deletions
diff --git a/subversion/bindings/javahl/native/JNIByteArray.cpp b/subversion/bindings/javahl/native/JNIByteArray.cpp index 34ce96c..cedb1bb 100644 --- a/subversion/bindings/javahl/native/JNIByteArray.cpp +++ b/subversion/bindings/javahl/native/JNIByteArray.cpp @@ -32,30 +32,24 @@ * @param flag that the underlying byte array reference should be deleted at * destruction */ -JNIByteArray::JNIByteArray(jbyteArray jba, bool deleteByteArray) -{ - m_array = jba; - m_deleteByteArray = deleteByteArray; - if (jba != NULL) - { - // Get the bytes. - JNIEnv *env = JNIUtil::getEnv(); - m_data = env->GetByteArrayElements(jba, NULL); - } - else - { - m_data = NULL; - } -} +JNIByteArray::JNIByteArray(jbyteArray jba, + bool deleteByteArray, + bool abortOnRelease) + : m_array(jba), + m_data(!jba ? NULL + : JNIUtil::getEnv()->GetByteArrayElements(jba, NULL)), + m_deleteByteArray(deleteByteArray), + m_abortOnRelease(abortOnRelease) +{} JNIByteArray::~JNIByteArray() { if (m_array != NULL) { // Release the bytes - JNIUtil::getEnv()->ReleaseByteArrayElements(m_array, - m_data, - JNI_ABORT); + JNIUtil::getEnv()->ReleaseByteArrayElements( + m_array, m_data, + (m_abortOnRelease ? JNI_ABORT: JNI_COMMIT)); if (m_deleteByteArray) // And if needed the byte array. JNIUtil::getEnv()->DeleteLocalRef(m_array); |