summaryrefslogtreecommitdiffstats
path: root/src/sbus/sssd_dbus_properties.c
diff options
context:
space:
mode:
authorPavel Březina <pbrezina@redhat.com>2014-12-17 13:26:16 +0100
committerJakub Hrozek <jhrozek@redhat.com>2015-02-17 15:53:39 +0100
commitdf4e1db5d41c903ae57fd880acc76a0ad84aa7b2 (patch)
treefa052523b587c0728638b513582694e61134f409 /src/sbus/sssd_dbus_properties.c
parente8058322725ba050014777ee2484f7e833ab1e3a (diff)
downloadsssd-df4e1db5d41c903ae57fd880acc76a0ad84aa7b2.tar.gz
sssd-df4e1db5d41c903ae57fd880acc76a0ad84aa7b2.tar.xz
sssd-df4e1db5d41c903ae57fd880acc76a0ad84aa7b2.zip
sbus: use hard coded getters instead of generated
Properties are single value of a small number of predefined D-Bus types. There is no need to generate them with codegen. Actually, the source generator for property getters is already quite mess with branching for array, strings and object paths. Adding any more complex type in the future (such as dictionary) would require even more branching or creating a separate path for it. Hard coding the getters will simplify creating new ones for more complex types. This patch also reduces lots of code duplication and creates a simple function for GetAll. Reviewed-by: Jakub Hrozek <jhrozek@redhat.com>
Diffstat (limited to 'src/sbus/sssd_dbus_properties.c')
-rw-r--r--src/sbus/sssd_dbus_properties.c51
1 files changed, 36 insertions, 15 deletions
diff --git a/src/sbus/sssd_dbus_properties.c b/src/sbus/sssd_dbus_properties.c
index 060da584e..15bc6a937 100644
--- a/src/sbus/sssd_dbus_properties.c
+++ b/src/sbus/sssd_dbus_properties.c
@@ -25,6 +25,7 @@
#include "sbus/sssd_dbus.h"
#include "sbus/sssd_dbus_meta.h"
#include "sbus/sssd_dbus_private.h"
+#include "sbus/sssd_dbus_invokers.h"
#define CHECK_SIGNATURE_OR_FAIL(req, error, label, exp) do { \
const char *__sig; \
@@ -124,11 +125,9 @@ sbus_properties_vtable(void)
return &iface.vtable;
}
-static int sbus_properties_invoke(struct sbus_request *sbus_req,
- struct sbus_interface *iface,
- sbus_msg_handler_fn handler_fn,
- void *handler_data,
- sbus_method_invoker_fn invoker_fn)
+static struct sbus_request *
+sbus_properties_subreq(struct sbus_request *sbus_req,
+ struct sbus_interface *iface)
{
struct sbus_request *sbus_subreq;
@@ -137,20 +136,18 @@ static int sbus_properties_invoke(struct sbus_request *sbus_req,
* so it is freed together. */
sbus_subreq = sbus_new_request(sbus_req->conn, iface, sbus_req->message);
if (sbus_subreq == NULL) {
- return ENOMEM;
+ return NULL;
}
talloc_steal(sbus_subreq, sbus_req);
- sbus_request_invoke_or_finish(sbus_subreq, handler_fn, handler_data,
- invoker_fn);
-
- return EOK;
+ return sbus_subreq;
}
static int sbus_properties_get(struct sbus_request *sbus_req, void *pvt)
{
DBusError *error;
+ struct sbus_request *sbus_subreq;
struct sbus_connection *conn;
struct sbus_interface *iface;
const struct sbus_property_meta *prop;
@@ -202,8 +199,15 @@ static int sbus_properties_get(struct sbus_request *sbus_req, void *pvt)
goto fail;
}
- return sbus_properties_invoke(sbus_req, iface, handler_fn,
- iface->handler_data, prop->invoker_get);
+ sbus_subreq = sbus_properties_subreq(sbus_req, iface);
+ if (sbus_subreq == NULL) {
+ error = NULL;
+ goto fail;
+ }
+
+ sbus_invoke_get(sbus_subreq, prop->type,
+ prop->invoker_get, handler_fn);
+ return EOK;
fail:
return sbus_request_fail_and_finish(sbus_req, error);
@@ -218,6 +222,7 @@ static int sbus_properties_set(struct sbus_request *sbus_req, void *pvt)
DBusError *error;
DBusMessageIter iter;
DBusMessageIter iter_variant;
+ struct sbus_request *sbus_subreq;
struct sbus_connection *conn;
struct sbus_interface *iface;
const struct sbus_property_meta *prop;
@@ -276,9 +281,17 @@ static int sbus_properties_set(struct sbus_request *sbus_req, void *pvt)
goto fail;
}
- return sbus_properties_invoke(sbus_req, iface, handler_fn,
+ sbus_subreq = sbus_properties_subreq(sbus_req, iface);
+ if (sbus_subreq == NULL) {
+ error = NULL;
+ goto fail;
+ }
+
+ sbus_request_invoke_or_finish(sbus_subreq, handler_fn,
iface->handler_data, prop->invoker_set);
+ return EOK;
+
fail:
return sbus_request_fail_and_finish(sbus_req, error);
}
@@ -286,6 +299,7 @@ fail:
static int sbus_properties_get_all(struct sbus_request *sbus_req, void *pvt)
{
DBusError *error;
+ struct sbus_request *sbus_subreq;
struct sbus_connection *conn;
struct sbus_interface *iface;
const char *interface_name;
@@ -312,8 +326,15 @@ static int sbus_properties_get_all(struct sbus_request *sbus_req, void *pvt)
goto fail;
}
- return sbus_properties_invoke(sbus_req, iface, NULL, NULL,
- iface->vtable->meta->invoker_get_all);
+ sbus_subreq = sbus_properties_subreq(sbus_req, iface);
+ if (sbus_subreq == NULL) {
+ error = NULL;
+ goto fail;
+ }
+
+ iface->vtable->meta->invoker_get_all(sbus_subreq);
+
+ return EOK;
fail:
return sbus_request_fail_and_finish(sbus_req, error);