diff options
author | Martijn Coenen <maco@google.com> | 2017-01-13 11:08:51 +0100 |
---|---|---|
committer | Martijn Coenen <maco@google.com> | 2017-01-13 14:17:12 +0100 |
commit | 14fae06b603b431f341453ddbfa69bbc2e03c959 (patch) | |
tree | d8c7e40889c2fdbf240dbd1a8530edc9baaad385 | |
parent | 0938b22c0ab3f28acfcbcc4099b93dc0a43a691a (diff) | |
download | base-14fae06b603b431f341453ddbfa69bbc2e03c959.tar.gz |
Add nullable parameter to readEmbeddedBuffer.
To support reading embedded buffers that can be
nullptr (currently only in empty hidl_vec).
Bug: 34255213
Test: hidl_test_java
Change-Id: I72028f580b7863b6bfeb31a5c0f43deed36dfd64
-rw-r--r-- | core/java/android/os/HwParcel.java | 2 | ||||
-rw-r--r-- | core/jni/android_os_HwParcel.cpp | 11 |
2 files changed, 9 insertions, 4 deletions
diff --git a/core/java/android/os/HwParcel.java b/core/java/android/os/HwParcel.java index c7612d16d0c0..a265dd08a92f 100644 --- a/core/java/android/os/HwParcel.java +++ b/core/java/android/os/HwParcel.java @@ -212,7 +212,7 @@ public class HwParcel { public native final HwBlob readBuffer(); public native final HwBlob readEmbeddedBuffer( - long parentHandle, long offset); + long parentHandle, long offset, boolean nullable); public native final void writeBuffer(HwBlob blob); diff --git a/core/jni/android_os_HwParcel.cpp b/core/jni/android_os_HwParcel.cpp index aefdc84b1912..1bd233313ca3 100644 --- a/core/jni/android_os_HwParcel.cpp +++ b/core/jni/android_os_HwParcel.cpp @@ -822,7 +822,8 @@ static jobject JHwParcel_native_readBuffer(JNIEnv *env, jobject thiz) { } static jobject JHwParcel_native_readEmbeddedBuffer( - JNIEnv *env, jobject thiz, jlong parentHandle, jlong offset) { + JNIEnv *env, jobject thiz, jlong parentHandle, jlong offset, + jboolean nullable) { hardware::Parcel *parcel = JHwParcel::GetNativeContext(env, thiz)->getParcel(); @@ -830,11 +831,15 @@ static jobject JHwParcel_native_readEmbeddedBuffer( const void *ptr; status_t status = - parcel->readEmbeddedBuffer(&childHandle, parentHandle, offset, &ptr); + parcel->readNullableEmbeddedBuffer(&childHandle, parentHandle, offset, + &ptr); if (status != OK) { jniThrowException(env, "java/util/NoSuchElementException", NULL); return 0; + } else if (status == OK && !nullable && ptr == nullptr) { + jniThrowException(env, "java/lang/NullPointerException", NULL); + return 0; } return JHwBlob::NewObject(env, ptr, childHandle); @@ -945,7 +950,7 @@ static JNINativeMethod gMethods[] = { { "readBuffer", "()L" PACKAGE_PATH "/HwBlob;", (void *)JHwParcel_native_readBuffer }, - { "readEmbeddedBuffer", "(JJ)L" PACKAGE_PATH "/HwBlob;", + { "readEmbeddedBuffer", "(JJZ)L" PACKAGE_PATH "/HwBlob;", (void *)JHwParcel_native_readEmbeddedBuffer }, { "writeBuffer", "(L" PACKAGE_PATH "/HwBlob;)V", |