Merge "PointerType: disallow embedded"
diff --git a/PointerType.cpp b/PointerType.cpp
index cdf4a99..2b8e5a4 100644
--- a/PointerType.cpp
+++ b/PointerType.cpp
@@ -31,8 +31,8 @@
return true;
}
-std::string PointerType::getCppType(StorageMode /* mode */,
- bool /* specifyNamespaces */) const {
+std::string PointerType::getCppType(StorageMode /*mode*/,
+ bool /*specifyNamespaces*/) const {
return "void*";
}
@@ -47,16 +47,36 @@
void PointerType::emitReaderWriter(
Formatter& out,
const std::string& name,
- const std::string& /* parcelObj */,
- bool /* parcelObjIsPointer */,
- bool /* isReader */,
- ErrorMode /* mode */) const {
+ const std::string& /*parcelObj*/,
+ bool /*parcelObjIsPointer*/,
+ bool /*isReader*/,
+ ErrorMode /*mode*/) const {
out << "(void)" << name << ";\n";
- out << "LOG_ALWAYS_FATAL(\"Pointer is only supported in passthrough mode\");\n";
+ out << "LOG_ALWAYS_FATAL(\"Pointer is only supported in passthrough mode\");\n\n";
+}
+
+void PointerType::emitReaderWriterEmbedded(
+ Formatter& out,
+ size_t /*depth*/,
+ const std::string& name,
+ const std::string& /*sanitizedName*/,
+ bool /*nameIsPointer*/,
+ const std::string& parcelObj,
+ bool parcelObjIsPointer,
+ bool isReader,
+ ErrorMode mode,
+ const std::string& parentName,
+ const std::string& offsetText) const {
+ out << "(void) " << parcelObj << ";\n";
+ out << "(void) " << parentName << ";\n";
+ out << "(void) (" << offsetText << ");\n";
+
+ // same exact code
+ emitReaderWriter(out, name, parcelObj, parcelObjIsPointer, isReader, mode);
}
bool PointerType::needsEmbeddedReadWrite() const {
- return false;
+ return true;
}
bool PointerType::resultNeedsDeref() const {
diff --git a/PointerType.h b/PointerType.h
index 30c4a32..a5004c2 100644
--- a/PointerType.h
+++ b/PointerType.h
@@ -45,6 +45,19 @@
bool isReader,
ErrorMode mode) const override;
+ void emitReaderWriterEmbedded(
+ Formatter &out,
+ size_t depth,
+ const std::string &name,
+ const std::string &sanitizedName,
+ bool nameIsPointer,
+ const std::string &parcelObj,
+ bool parcelObjIsPointer,
+ bool isReader,
+ ErrorMode mode,
+ const std::string &parentName,
+ const std::string &offsetText) const override;
+
bool needsEmbeddedReadWrite() const override;
bool resultNeedsDeref() const override;
diff --git a/test/hidl_test/hidl_test_client.cpp b/test/hidl_test/hidl_test_client.cpp
index fd340c2..fcba0fc 100644
--- a/test/hidl_test/hidl_test_client.cpp
+++ b/test/hidl_test/hidl_test_client.cpp
@@ -474,20 +474,19 @@
auto handle2 = native_handle_create(0, 1);
handle->data[0] = 5;
handle2->data[0] = 6;
- IFoo::Everything e {
- .u = {.p = reinterpret_cast<void *>(0x5)},
+ IFoo::Everything e{
+ .u = {.number = 3},
.number = 10,
.h = handle,
.descSync = {std::vector<GrantorDescriptor>(), handle, 5},
.descUnsync = {std::vector<GrantorDescriptor>(), handle2, 6},
.mem = hidl_memory("mymem", handle, 5),
- .p = reinterpret_cast<void *>(0x6),
+ .p = reinterpret_cast<void*>(0x6),
.vs = {"hello", "world"},
.multidimArray = hidl_vec<hidl_string>{"hello", "great", "awesome", "nice"}.data(),
.sArray = hidl_vec<hidl_string>{"awesome", "thanks", "you're welcome"}.data(),
.anotherStruct = {.first = "first", .last = "last"},
- .bf = IFoo::BitField::V0 | IFoo::BitField::V2
- };
+ .bf = IFoo::BitField::V0 | IFoo::BitField::V2};
LOG(INFO) << toString(e);
LOG(INFO) << toString(foo);
// toString is for debugging purposes only; no good EXPECT