From: Ryan Lortie Date: Thu, 15 Jul 2010 20:53:43 +0000 (-0400) Subject: Bug 624484: GDBusSubtreeDispatchFunc clarification X-Git-Tag: 2.25.12~53 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=8a2d157d49c3dceda029bd0e14f8c7367daa2a36;p=platform%2Fupstream%2Fglib.git Bug 624484: GDBusSubtreeDispatchFunc clarification Pass NULL rather than "/" for the toplevel of a subtree. Add clarification to the docs about how trees are flat. --- diff --git a/gio/gdbusconnection.c b/gio/gdbusconnection.c index b7dd83a..b98fe24 100644 --- a/gio/gdbusconnection.c +++ b/gio/gdbusconnection.c @@ -5199,7 +5199,7 @@ handle_subtree_introspect (GDBusConnection *connection, } else { - requested_node = "/"; + requested_node = NULL; } interfaces = es->vtable->introspect (es->connection, @@ -5319,7 +5319,7 @@ handle_subtree_method_invocation (GDBusConnection *connection, } else { - requested_node = "/"; + requested_node = NULL; } /* get introspection data for the node */ diff --git a/gio/gdbusconnection.h b/gio/gdbusconnection.h index 7d9642e..8982092 100644 --- a/gio/gdbusconnection.h +++ b/gio/gdbusconnection.h @@ -330,11 +330,14 @@ typedef gchar** (*GDBusSubtreeEnumerateFunc) (GDBusConnection *connection, * @connection: A #GDBusConnection. * @sender: The unique bus name of the remote caller. * @object_path: The object path that was registered with g_dbus_connection_register_subtree(). - * @node: A node that is a child of @object_path (relative to @object_path) or / for the root of the subtree. + * @node: A node that is a child of @object_path (relative to @object_path) or %NULL for the root of the subtree. * @user_data: The @user_data #gpointer passed to g_dbus_connection_register_subtree(). * * The type of the @introspect function in #GDBusSubtreeVTable. * + * Subtrees are flat. @node, if non-%NULL, is always exactly one + * segment of the object path (ie: it never contains a slash). + * * This function should return %NULL to indicate that there is no object * at this node. * @@ -365,12 +368,15 @@ typedef GDBusInterfaceInfo ** (*GDBusSubtreeIntrospectFunc) (GDBusConnection * @sender: The unique bus name of the remote caller. * @object_path: The object path that was registered with g_dbus_connection_register_subtree(). * @interface_name: The D-Bus interface name that the method call or property access is for. - * @node: A node that is a child of @object_path (relative to @object_path) or / for the root of the subtree. + * @node: A node that is a child of @object_path (relative to @object_path) or %NULL for the root of the subtree. * @out_user_data: Return location for user data to pass to functions in the returned #GDBusInterfaceVTable (never %NULL). * @user_data: The @user_data #gpointer passed to g_dbus_connection_register_subtree(). * * The type of the @dispatch function in #GDBusSubtreeVTable. * + * Subtrees are flat. @node, if non-%NULL, is always exactly one + * segment of the object path (ie: it never contains a slash). + * * Returns: A #GDBusInterfaceVTable or %NULL if you don't want to handle the methods. * * Since: 2.26 diff --git a/gio/tests/gdbus-export.c b/gio/tests/gdbus-export.c index cfefe71..7a46d2d 100644 --- a/gio/tests/gdbus-export.c +++ b/gio/tests/gdbus-export.c @@ -628,7 +628,11 @@ subtree_introspect (GDBusConnection *connection, /* VPs implement the Foo interface, EVPs implement the Bar interface. The root * does not implement any interfaces */ - if (g_str_has_prefix (node, "vp")) + if (node == NULL) + { + return NULL; + } + else if (g_str_has_prefix (node, "vp")) { interfaces[0] = &foo_interface_info; } @@ -636,10 +640,6 @@ subtree_introspect (GDBusConnection *connection, { interfaces[0] = &bar_interface_info; } - else if (g_strcmp0 (node, "/") == 0) - { - return NULL; - } else { g_assert_not_reached ();