bus: add error handling for bus-open calls
sd-bus can return ENOMEDIUM in some cases for bus-open calls, so
we need to detect this condition rather than blindly ignoring the
return value. Add appropriate error handling.
Tested:
```
$ sudo builddir/example/calculator-server
Password:
terminate called after throwing an instance of 'sdbusplus::exception::SdBusError'
what(): sdbusplus::bus::bus sdbusplus::bus::new_default(): System.Error.ENOMEDIUM: No medium found
zsh: IOT instruction sudo builddir/example/calculator-server
```
Signed-off-by: Patrick Williams <patrick@stwcx.xyz>
Change-Id: I7b82a9e182f21a1cbbb80fc3dbfeaaa0174a369d
diff --git a/src/bus.cpp b/src/bus.cpp
index 7f96419..95dfc61 100644
--- a/src/bus.cpp
+++ b/src/bus.cpp
@@ -1,4 +1,5 @@
#include <sdbusplus/bus.hpp>
+#include <sdbusplus/exception.hpp>
namespace sdbusplus::bus
{
@@ -23,7 +24,11 @@
bus new_default()
{
sd_bus* b = nullptr;
- sd_bus_default(&b);
+ auto rc = sd_bus_default(&b);
+ if (rc < 0)
+ {
+ throw exception::SdBusError(-rc, __PRETTY_FUNCTION__);
+ }
return bus(b, std::false_type());
}
@@ -31,7 +36,11 @@
bus new_default_user()
{
sd_bus* b = nullptr;
- sd_bus_default_user(&b);
+ auto rc = sd_bus_default_user(&b);
+ if (rc < 0)
+ {
+ throw exception::SdBusError(-rc, __PRETTY_FUNCTION__);
+ }
return bus(b, std::false_type());
}
@@ -39,7 +48,11 @@
bus new_default_system()
{
sd_bus* b = nullptr;
- sd_bus_default_system(&b);
+ auto rc = sd_bus_default_system(&b);
+ if (rc < 0)
+ {
+ throw exception::SdBusError(-rc, __PRETTY_FUNCTION__);
+ }
return bus(b, std::false_type());
}
@@ -47,7 +60,11 @@
bus new_bus()
{
sd_bus* b = nullptr;
- sd_bus_open(&b);
+ auto rc = sd_bus_open(&b);
+ if (rc < 0)
+ {
+ throw exception::SdBusError(-rc, __PRETTY_FUNCTION__);
+ }
bus bus(b, std::false_type());
bus.set_should_close(true);
return bus;
@@ -57,7 +74,11 @@
bus new_user()
{
sd_bus* b = nullptr;
- sd_bus_open_user(&b);
+ auto rc = sd_bus_open_user(&b);
+ if (rc < 0)
+ {
+ throw exception::SdBusError(-rc, __PRETTY_FUNCTION__);
+ }
bus bus(b, std::false_type());
bus.set_should_close(true);
return bus;
@@ -67,7 +88,11 @@
bus new_system()
{
sd_bus* b = nullptr;
- sd_bus_open_system(&b);
+ auto rc = sd_bus_open_system(&b);
+ if (rc < 0)
+ {
+ throw exception::SdBusError(-rc, __PRETTY_FUNCTION__);
+ }
bus bus(b, std::false_type());
bus.set_should_close(true);
return bus;