summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMartijn Coenen <maco@google.com>2017-01-13 11:08:51 +0100
committerMartijn Coenen <maco@google.com>2017-01-13 14:17:12 +0100
commit14fae06b603b431f341453ddbfa69bbc2e03c959 (patch)
treed8c7e40889c2fdbf240dbd1a8530edc9baaad385
parent0938b22c0ab3f28acfcbcc4099b93dc0a43a691a (diff)
downloadbase-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.java2
-rw-r--r--core/jni/android_os_HwParcel.cpp11
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",