diff --git a/src/dbus.c b/src/dbus.c index 8dd2a7f9..66caa093 100644 --- a/src/dbus.c +++ b/src/dbus.c @@ -26,6 +26,7 @@ #include #include +#include #include #include @@ -192,6 +193,40 @@ struct l_dbus_message *dbus_error_not_hidden(struct l_dbus_message *msg) "Not hidden"); } +struct l_dbus_message *dbus_error_from_errno(int err, + struct l_dbus_message *msg) +{ + switch (err) { + case -EBUSY: + return dbus_error_busy(msg); + case -ECANCELED: + return dbus_error_aborted(msg); + case -ERFKILL: + return dbus_error_not_available(msg); + case -EINVAL: + return dbus_error_invalid_args(msg); + case -EBADMSG: + return dbus_error_invalid_format(msg); + case -EEXIST: + return dbus_error_already_exists(msg); + case -ENOENT: + return dbus_error_not_found(msg); + case -ENOTSUP: + return dbus_error_not_supported(msg); + /* TODO: no_agent */ + case -ENOKEY: + return dbus_error_not_configured(msg); + case -ENOTCONN: + return dbus_error_not_connected(msg); + case -ENOSYS: + return dbus_error_not_implemented(msg); + default: + break; + } + + return dbus_error_failed(msg); +} + void dbus_pending_reply(struct l_dbus_message **msg, struct l_dbus_message *reply) { diff --git a/src/dbus.h b/src/dbus.h index 58c750f1..9c64ee92 100644 --- a/src/dbus.h +++ b/src/dbus.h @@ -74,6 +74,9 @@ struct l_dbus_message *dbus_error_already_provisioned( struct l_dbus_message *msg); struct l_dbus_message *dbus_error_not_hidden(struct l_dbus_message *msg); +struct l_dbus_message *dbus_error_from_errno(int err, + struct l_dbus_message *msg); + bool dbus_init(bool enable_debug); bool dbus_exit(void); void dbus_shutdown(void);