<div style="font-family: Arial, sans-serif; font-size: 14px;">Hi folks,</div><div style="font-family: Arial, sans-serif; font-size: 14px;"><br></div><div style="font-family: Arial, sans-serif; font-size: 14px;">Does sd-bus API provide a way to append a char string of a basic type (be it <code>SD_BUS_TYPE_STRING</code>​<span>, <code>SD_BUS_TYPE_OBJECT_PATH</code>​<span>, or <code>SD_BUS_TYPE_SIGNATURE</code>​<span> for that matter)</span></span></span> to a D-Bus message while allowing the caller to explicitly specify the length of that char string?</div><div style="font-family: Arial, sans-serif; font-size: 14px;"><br></div><div style="font-family: Arial, sans-serif; font-size: 14px;"><span><code>sd_bus_message_append_basic()</code>​ function takes a pointer only, and calls <code>strlen()</code>​ on that pointer.</span></div><div style="font-family: Arial, sans-serif; font-size: 14px;"><span><br></span></div><div style="font-family: Arial, sans-serif; font-size: 14px;"><span>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 <code>std::string_view</code>​ to the D-Bus message without having to convert a <code>std::string_view</code>​ to a <code>std::string</code>​ just to get null-terminated string which can then be passed safely to <code>sd_bus_message_append_basic()</code>​. Right now we have to do that conversion which defeats the fundamental purpose of <code>std::string_view</code>​ type in C++ standard library.</span></div><div style="font-family: Arial, sans-serif; font-size: 14px;"><span><br></span></div><div style="font-family: Arial, sans-serif; font-size: 14px;">For example something along these lines:</div><div style="font-family: Arial, sans-serif; font-size: 14px;"><br></div><div style="font-family: Arial, sans-serif; font-size: 14px;"><span><code>int sd_bus_message_append_basic_string_n(sd_bus_message *m, char type, const void *p, size_t len);</code>​</span><br></div><div style="font-family: Arial, sans-serif; font-size: 14px;"><span><br></span></div><div style="font-family: Arial, sans-serif; font-size: 14px;"><span>Which would work only for the above-mentioned three D-Bus string types.</span></div><div style="font-family: Arial, sans-serif; font-size: 14px;"><span><br></span></div><div style="font-family: Arial, sans-serif; font-size: 14px;"><span>And in C++ code (sdbus-c++ wrapper, for example), we could call it simply like this:</span></div><div style="font-family: Arial, sans-serif; font-size: 14px;"><br></div><div style="font-family: Arial, sans-serif; font-size: 14px;"><code>std::string_view view{...};</code></div><div style="font-family: Arial, sans-serif; font-size: 14px;"><code><span style="background-color:rgb(255, 255, 255);display:inline !important">sd_bus_message_append_basic_string_n(msg, <span style="background-color:rgb(255, 255, 255);display:inline !important">SD_BUS_TYPE_STRING</span>, view.data(), view.length());</span><br></code></div><div style="font-family: Arial, sans-serif; font-size: 14px;"><br></div><div style="font-family: Arial, sans-serif; font-size: 14px;">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?</div><div style="font-family: Arial, sans-serif; font-size: 14px;"><br></div><div style="font-family: Arial, sans-serif; font-size: 14px;">Kind regards,</div><div style="font-family: Arial, sans-serif; font-size: 14px;"><br></div><div style="font-family: Arial, sans-serif; font-size: 14px;">Stanislav.</div><div style="font-family: Arial, sans-serif; font-size: 14px;"><br></div><div class="protonmail_signature_block" style="font-family: Arial, sans-serif; font-size: 14px;">
</div>