Hi folks,
Does sd-bus API provide a way to append a char string of a basic type (be it
SD_BUS_TYPE_STRING
, SD_BUS_TYPE_OBJECT_PATH
, or SD_BUS_TYPE_SIGNATURE
for that matter) to a D-Bus message while allowing the caller to explicitly specify the length of that char string?sd_bus_message_append_basic()
function takes a pointer only, and calls strlen()
on that pointer.If there is no such API, could we add a new function with string size as an additional parameter. It would make the API more usable and general and, as a specific use case, help C++ code using sd-bus API to append char strings of type
std::string_view
to the D-Bus message without having to convert a std::string_view
to a std::string
just to get null-terminated string which can then be passed safely to sd_bus_message_append_basic()
. Right now we have to do that conversion which defeats the fundamental purpose of std::string_view
type in C++ standard library.For example something along these lines:
int sd_bus_message_append_basic_string_n(sd_bus_message *m, char type, const void *p, size_t len);
Which would work only for the above-mentioned three D-Bus string types.
And in C++ code (sdbus-c++ wrapper, for example), we could call it simply like this:
std::string_view view{...};
sd_bus_message_append_basic_string_n(msg, SD_BUS_TYPE_STRING, view.data(), view.length());
What do you think of this proposal? Could we extend sd-bus API along these lines? Would you do that or shall I create a PR?
Kind regards,
Stanislav.