sdbusplus: Fix build on GCC 8 or ealier
The code to construct sd_bus_vtables uses the designated initializer
syntax that is not supported on GCC 8 or ealier versions.
Workaround it by specific the return value type, so it compiles on
older GCC versions.
Resolves openbmc/sdbusplus#40
Tested: Verify the code builds with GCC 8.3.0 and 7.4.0;
Verify the generated code is the same with x86-64 GCC 9.2.0
and -Os option on https://godbolt.org/
Signed-off-by: Lei YU <mine260309@gmail.com>
Change-Id: I2496efacdb9edf7b8b7f7ad435c192bf402e8d75
diff --git a/sdbusplus/vtable.hpp b/sdbusplus/vtable.hpp
index 1a15526..c2d8ba6 100644
--- a/sdbusplus/vtable.hpp
+++ b/sdbusplus/vtable.hpp
@@ -113,19 +113,19 @@
constexpr vtable_t start(decltype(vtable_t::flags) flags)
{
- return SD_BUS_VTABLE_START(flags);
+ return vtable_t SD_BUS_VTABLE_START(flags);
}
constexpr vtable_t end()
{
- return SD_BUS_VTABLE_END;
+ return vtable_t SD_BUS_VTABLE_END;
}
constexpr vtable_t method(const char* member, const char* signature,
const char* result, sd_bus_message_handler_t handler,
decltype(vtable_t::flags) flags)
{
- return SD_BUS_METHOD(member, signature, result, handler, flags);
+ return vtable_t SD_BUS_METHOD(member, signature, result, handler, flags);
}
constexpr vtable_t method_o(const char* member, const char* signature,
@@ -133,21 +133,21 @@
sd_bus_message_handler_t handler, size_t offset,
decltype(vtable_t::flags) flags)
{
- return SD_BUS_METHOD_WITH_OFFSET(member, signature, result, handler, offset,
- flags);
+ return vtable_t SD_BUS_METHOD_WITH_OFFSET(member, signature, result,
+ handler, offset, flags);
}
constexpr vtable_t signal(const char* member, const char* signature,
decltype(vtable_t::flags) flags)
{
- return SD_BUS_SIGNAL(member, signature, flags);
+ return vtable_t SD_BUS_SIGNAL(member, signature, flags);
}
constexpr vtable_t property(const char* member, const char* signature,
sd_bus_property_get_t get,
decltype(vtable_t::flags) flags)
{
- return SD_BUS_PROPERTY(member, signature, get, 0, flags);
+ return vtable_t SD_BUS_PROPERTY(member, signature, get, 0, flags);
}
constexpr vtable_t property(const char* member, const char* signature,
@@ -155,21 +155,22 @@
sd_bus_property_set_t set,
decltype(vtable_t::flags) flags)
{
- return SD_BUS_WRITABLE_PROPERTY(member, signature, get, set, 0, flags);
+ return vtable_t SD_BUS_WRITABLE_PROPERTY(member, signature, get, set, 0,
+ flags);
}
constexpr vtable_t property_o(const char* member, const char* signature,
size_t offset, decltype(vtable_t::flags) flags)
{
- return SD_BUS_PROPERTY(member, signature, nullptr, offset, flags);
+ return vtable_t SD_BUS_PROPERTY(member, signature, nullptr, offset, flags);
}
constexpr vtable_t property_o(const char* member, const char* signature,
sd_bus_property_set_t set, size_t offset,
decltype(vtable_t::flags) flags)
{
- return SD_BUS_WRITABLE_PROPERTY(member, signature, nullptr, set, offset,
- flags);
+ return vtable_t SD_BUS_WRITABLE_PROPERTY(member, signature, nullptr, set,
+ offset, flags);
}
} // namespace vtable