Fix vtable entires for offset callbacks
property_o didn't pass through the callbacks as sd-bus expected, so
they can't be used for read-write properties. Add the expected methods.
Change-Id: Iad7592c99a60c22c10e274517ebfcbf8cf293a42
Signed-off-by: Ed Tanous <edtanous@google.com>
diff --git a/include/sdbusplus/vtable.hpp b/include/sdbusplus/vtable.hpp
index 6e7def3..f9d0c9e 100644
--- a/include/sdbusplus/vtable.hpp
+++ b/include/sdbusplus/vtable.hpp
@@ -79,22 +79,25 @@
*
* @param[in] member - Name of signal.
* @param[in] signature - Signature of signal.
+ * @param[in] get - Functor to call on property get.
* @param[in] offset - Offset within object for property.
* @param[in] flags - optional sdbusplus::vtable::property_ value.
*/
constexpr vtable_t property_o(const char* member, const char* signature,
- size_t offset,
+ sd_bus_property_get_t get, size_t offset,
decltype(vtable_t::flags) flags = 0);
/** Create a SD_BUS_WRITABLE_PROPERTY entry.
*
* @param[in] member - Name of signal.
* @param[in] signature - Signature of signal.
+ * @param[in] get - Functor to call on property get.
* @param[in] set - Functor to call on property set.
* @param[in] offset - Offset within object for property.
* @param[in] flags - optional sdbusplus::vtable::property_ value.
*/
constexpr vtable_t property_o(const char* member, const char* signature,
+ sd_bus_property_get_t get,
sd_bus_property_set_t set, size_t offset,
decltype(vtable_t::flags) flags = 0);
@@ -168,16 +171,18 @@
}
constexpr vtable_t property_o(const char* member, const char* signature,
- size_t offset, decltype(vtable_t::flags) flags)
+ sd_bus_property_get_t get, size_t offset,
+ decltype(vtable_t::flags) flags)
{
- return vtable_t SD_BUS_PROPERTY(member, signature, nullptr, offset, flags);
+ return vtable_t SD_BUS_PROPERTY(member, signature, get, offset, flags);
}
constexpr vtable_t property_o(const char* member, const char* signature,
+ sd_bus_property_get_t get,
sd_bus_property_set_t set, size_t offset,
decltype(vtable_t::flags) flags)
{
- return vtable_t SD_BUS_WRITABLE_PROPERTY(member, signature, nullptr, set,
+ return vtable_t SD_BUS_WRITABLE_PROPERTY(member, signature, get, set,
offset, flags);
}
diff --git a/test/vtable/vtable.cpp b/test/vtable/vtable.cpp
index 5ed38b8..abb27d6 100644
--- a/test/vtable/vtable.cpp
+++ b/test/vtable/vtable.cpp
@@ -24,7 +24,7 @@
sdbusplus::vtable::property("7", "8", &test_get,
sdbusplus::vtable::property_::const_),
sdbusplus::vtable::property("10", "11", &test_get, &test_set),
- sdbusplus::vtable::property_o("14", "15", 16),
+ sdbusplus::vtable::property_o("14", "15", &test_get, 16),
sdbusplus::vtable::end()};
TEST(VtableTest, SameSize)
diff --git a/test/vtable/vtable_c.c b/test/vtable/vtable_c.c
index 105409f..686833b 100644
--- a/test/vtable/vtable_c.c
+++ b/test/vtable/vtable_c.c
@@ -44,7 +44,7 @@
SD_BUS_SIGNAL("5", "6", 0),
SD_BUS_PROPERTY("7", "8", &test_get, 0, SD_BUS_VTABLE_PROPERTY_CONST),
SD_BUS_WRITABLE_PROPERTY("10", "11", &test_get, &test_set, 0, 0),
- SD_BUS_PROPERTY("14", "15", NULL, 16, 0),
+ SD_BUS_PROPERTY("14", "15", &test_get, 16, 0),
SD_BUS_VTABLE_END,
};