How to get the return value using the command busctl set-property?
Bruce Lee (李昀峻)
Bruce_Lee at quantatw.com
Mon Apr 19 21:15:49 AEST 2021
> -----Original Message-----
> From: Patrick Williams <patrick at stwcx.xyz>
> Sent: Friday, April 16, 2021 10:58 PM
> To: Bruce Lee (李昀峻) <Bruce_Lee at quantatw.com>
> Cc: openbmc at lists.ozlabs.org; edtanous at google.com; Nan Zhou
> <nanzhou at google.com>
> Subject: Re: How to get the return value using the command busctl set-property?
>
> On Fri, Apr 16, 2021 at 04:46:00AM +0000, Bruce Lee (李昀峻) wrote:
> > Does busctl set-property can get its return value?
> ...
> > If can get its return value from set-property, how to do it?
>
> There isn't really a return value from a set-property call; there is only a possiblity
> of error.
>
> If you look at 'man SD_BUS_PROPERTY' you'll see the function type for a
> property set is:
>
> typedef int (*sd_bus_property_set_t)(sd_bus *bus, const char *path,
> const char *interface,
> const char *property,
> sd_bus_message *value,
> void *userdata,
> sd_bus_error *ret_error);
>
> This is where the 'int' return you're seeing from these set-property handlers
> coming from. The way systemd handles the return code is that any negative
> number becomes a negative errno style value that systemd turns into an
> appropriate error message back across the dbus. There is a paragraph in the
> manpage with more details:
>
> If a callback was invoked to handle a request that expects a reply and
> the callback returns a negative value, the value is interpreted as a
> negative errno-style error code and sent back to the caller as a D-Bus
> error as if sd_bus_reply_method_errno(3) was called. Additionally, all
> callbacks take a sd_bus_error output parameter that can be used to
> provide more detailed error information. If ret_error is set when the
> callback finishes, the corresponding D-Bus error is sent back to the
> caller as if sd_bus_reply_method_error(3) was called. Any error stored
> in ret_error takes priority over any negative values returned by the
> same callback when determining which error to send back to the caller.
>
> The *best* way for a set-property handler to return an error is to use the
> sd_bus_reply_method_error or fill out the ret_error with sd_bus_error_set.
> Both the ASIO object_server.hpp and the
> sdbus++-generated server bindings catch excpetions thrown out of the
> set-property handlers and turn them into sd_bus_error_set calls.
>
Thanks for your reply, it's very useful to me.
> Other than the negative value indicating a errno, the positive value has no
> meaning and does not do anything at a dbus level.
>
> --
> Patrick Williams
More information about the openbmc
mailing list