#if defined DROUTE_DEBUG
#define _DROUTE_DEBUG(format, args...) g_print (format , ## args)
#else
- #define _DROUTE_DEBUG
+ #define _DROUTE_DEBUG(format, args...)
#endif
struct _DRouteContext
cnx->bus = bus;
cnx->registered_paths = g_ptr_array_new ();
cnx->introspect_dir = g_strdup(introspect_dir);
+
+ return cnx;
}
void
const void *data)
{
DRoutePath *new_path;
+ gboolean registered;
new_path = path_new (cnx, (void *) data, NULL);
- if (!dbus_connection_register_object_path (cnx->bus, path, &droute_vtable, new_path))
+ registered = dbus_connection_register_object_path (cnx->bus, path, &droute_vtable, new_path);
+ if (!registered)
oom();
g_ptr_array_add (cnx->registered_paths, new_path);
reply = dbus_message_new_method_return (message);
dbus_message_iter_init_append (reply, &iter);
- (prop_funcs->get) (&iter, datum);
+ if (!(prop_funcs->get) (&iter, datum))
+ {
+ dbus_message_unref (reply);
+ reply = dbus_message_new_error (message, DBUS_ERROR_FAILED, "Get failed");
+ }
}
else if (!get && prop_funcs->set)
{
_DROUTE_DEBUG ("DRoute (handle prop Get): %s|%s on %s\n", pair.one, pair.two, pathstr);
- dbus_message_iter_init_append (message, &iter);
+ dbus_message_iter_init (message, &iter);
/* Skip the interface and property name */
dbus_message_iter_next(&iter);
dbus_message_iter_next(&iter);
StrPair pair;
DRouteFunction func;
- DBusMessage *reply;
+ DBusMessage *reply = NULL;
pair.one = iface;
pair.two = member;
reply = (func) (bus, message, datum);
- if (reply)
+ if (!reply)
{
- dbus_connection_send (bus, reply, NULL);
- dbus_message_unref (reply);
+ /* All D-Bus method calls must have a reply.
+ * If one is not provided presume that the call has a void
+ * return and no error has occured.
+ */
+ reply = dbus_message_new_method_return (message);
}
+ dbus_connection_send (bus, reply, NULL);
+ dbus_message_unref (reply);
result = DBUS_HANDLER_RESULT_HANDLED;
}
return result;