From 31081f98e76986cf92a9358ae78f55eafcd69fd4 Mon Sep 17 00:00:00 2001 From: Denis Kenzior Date: Mon, 2 Jul 2018 11:33:49 -0500 Subject: [PATCH] dbus: Add dbus_error_from_errno --- src/dbus.c | 35 +++++++++++++++++++++++++++++++++++ src/dbus.h | 3 +++ 2 files changed, 38 insertions(+) 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);