diff options
author | Colin Walters <walters@verbum.org> | 2005-03-09 17:09:11 +0000 |
---|---|---|
committer | Colin Walters <walters@verbum.org> | 2005-03-09 17:09:11 +0000 |
commit | 74b1b35402f6b9bbc09999a6224dfc04bc48b2a9 (patch) | |
tree | c9cae2dde5d4b11d4cf7e17e5c3009280e1f8ee5 /glib/dbus-binding-tool-glib.c | |
parent | 2958e723fc996e2dd7edfdc6ac53dcdf48323549 (diff) |
2005-03-09 Colin Walters <walters@verbum.org>
* glib/dbus-gproxy.c (dbus_g_proxy_invoke): New method; calls
to this are generated for client-side wrappers. Invokes a
D-BUS method and returns reply values.
* glib/dbus-binding-tool-glib.c (write_args_sig_for_direction): New
function; writes signature string for argument direction.
(write_args_for_direction): Change to pass input values directly
instead of via address, and fix indentation.
(generate_client_glue): Change to invoke dbus_g_proxy_invoke. Also
make generated wrappers inlineable.
* dbus/dbus-message.c (dbus_message_iter_get_fixed_array): Add
note about using dbus_type_is_fixed.
* dbus/dbus-marshal-basic.c (_dbus_type_is_fixed): Moved to
dbus/dbus-signature.c as dbus_type_is_fixed.
All callers updated.
* dbus/dbus-signature.c (dbus_type_is_fixed): Moved here
from dbus/dbus-marshal-basic.c:_dbus_type_is_fixed.
* dbus/dbus-signature.h: Prototype.
* glib/dbus-binding-tool-glib.c (compute_marshaller_name): Fix
error printf code.
* test/glib/test-dbus-glib.c (main): Be sure to clear error as
appropriate instead of just freeing it.
(main): Free returned strings using g_free.
* test/glib/Makefile.am (test-service-glib-glue.h)
(test-service-glib-bindings.h): Add dependency on dbus-binding-tool.
* glib/dbus-gvalue.c (MAP_BASIC): Refactored from MAP_BASIC_INIT;
simply maps a simple D-BUS type to GType.
(dbus_dbus_type_to_gtype): Function which maps D-BUS type to
GType.
(dbus_gvalue_init): Just invoke dbus_dbus_type_to_gtype and
initialize the value with it.
(dbus_gvalue_binding_type_from_type): Unused, delete.
(dbus_gvalue_demarshal): Switch to hardcoding demarshalling for
various types instead of unmarshalling to value data directly.
Remove can_convert boolean.
(dbus_gvalue_marshal): Remove duplicate initialization; switch to
returning directly instead of using can_convert boolean.
(dbus_gvalue_store): New function; not related to D-BUS per-se.
Stores a GValue in a pointer to a value of its corresponding C
type.
* glib/dbus-gvalue.h: Remove dbus_gvalue_binding_type_from_type,
add dbus_gvalue_store.
Diffstat (limited to 'glib/dbus-binding-tool-glib.c')
-rw-r--r-- | glib/dbus-binding-tool-glib.c | 73 |
1 files changed, 41 insertions, 32 deletions
diff --git a/glib/dbus-binding-tool-glib.c b/glib/dbus-binding-tool-glib.c index 641f07da..5bd413e1 100644 --- a/glib/dbus-binding-tool-glib.c +++ b/glib/dbus-binding-tool-glib.c @@ -140,7 +140,7 @@ compute_marshaller_name (MethodInfo *method, GError **error) g_set_error (error, DBUS_BINDING_TOOL_ERROR, DBUS_BINDING_TOOL_ERROR_UNSUPPORTED_CONVERSION, - _("Unsupported conversion from D-BUS type %d to glib-genmarshal type"), + _("Unsupported conversion from D-BUS type %s to glib-genmarshal type"), type); g_string_free (ret, TRUE); return NULL; @@ -647,42 +647,54 @@ write_formal_parameters (InterfaceInfo *iface, MethodInfo *method, GIOChannel *c } static gboolean -write_args_for_direction (InterfaceInfo *iface, MethodInfo *method, GIOChannel *channel, int direction, GError **error) +write_args_sig_for_direction (InterfaceInfo *iface, MethodInfo *method, GIOChannel *channel, int direction, GError **error) { GSList *args; + WRITE_OR_LOSE ("\""); + for (args = method_info_get_args (method); args; args = args->next) { ArgInfo *arg; - const char *type_str; arg = args->data; if (direction != arg_info_get_direction (arg)) continue; - type_str = dbus_gvalue_binding_type_from_type (arg_info_get_type (arg)); - if (!type_str) - { - g_set_error (error, - DBUS_BINDING_TOOL_ERROR, - DBUS_BINDING_TOOL_ERROR_UNSUPPORTED_CONVERSION, - _("Unsupported conversion from D-BUS type %s"), - arg_info_get_type (arg)); - return FALSE; - } + if (!write_printf_to_iochannel ("%s", channel, error, arg_info_get_type (arg))) + goto io_lose; + } + + WRITE_OR_LOSE ("\", "); + + return TRUE; + io_lose: + return FALSE; +} + +static gboolean +write_args_for_direction (InterfaceInfo *iface, MethodInfo *method, GIOChannel *channel, int direction, GError **error) +{ + GSList *args; + + for (args = method_info_get_args (method); args; args = args->next) + { + ArgInfo *arg; + + arg = args->data; + + if (direction != arg_info_get_direction (arg)) + continue; - switch (direction) { case ARG_IN: - if (!write_printf_to_iochannel (" %s, &IN_%s,\n", channel, error, - type_str, arg_info_get_name (arg))) + if (!write_printf_to_iochannel ("IN_%s, ", channel, error, arg_info_get_name (arg))) goto io_lose; break; case ARG_OUT: - if (!write_printf_to_iochannel (" %s, OUT_%s,\n", channel, error, - type_str, arg_info_get_name (arg))) + if (!write_printf_to_iochannel ("OUT_%s, ", channel, error, arg_info_get_name (arg))) goto io_lose; break; case ARG_INVALID: @@ -746,7 +758,7 @@ generate_client_glue (BaseInfo *base, DBusBindingToolCData *data, GError **error method_name = compute_client_method_name (interface, method); - WRITE_OR_LOSE ("static gboolean\n"); + WRITE_OR_LOSE ("static\n#ifdef G_HAVE_INLINE\ninline\n#endif\ngboolean\n"); if (!write_printf_to_iochannel ("%s (DBusGProxy *proxy", channel, error, method_name)) goto io_lose; @@ -758,29 +770,26 @@ generate_client_glue (BaseInfo *base, DBusBindingToolCData *data, GError **error WRITE_OR_LOSE (", GError **error)\n\n"); WRITE_OR_LOSE ("{\n"); - WRITE_OR_LOSE (" gboolean ret;\n\n"); - WRITE_OR_LOSE (" DBusGPendingCall *call;\n\n"); - if (!write_printf_to_iochannel (" call = dbus_g_proxy_begin_call (proxy, \"%s\",\n", - channel, error, + if (!write_printf_to_iochannel (" return dbus_g_proxy_invoke (proxy, \"%s\", ", channel, error, method_info_get_name (method))) goto io_lose; - if (!write_args_for_direction (interface, method, channel, ARG_IN, error)) + if (!write_args_sig_for_direction (interface, method, channel, ARG_IN, error)) goto io_lose; - WRITE_OR_LOSE (" DBUS_TYPE_INVALID);\n"); - WRITE_OR_LOSE (" ret = dbus_g_proxy_end_call (proxy, call, error,\n"); - - if (!write_args_for_direction (interface, method, channel, ARG_OUT, error)) + if (!write_args_sig_for_direction (interface, method, channel, ARG_OUT, error)) goto io_lose; - WRITE_OR_LOSE (" DBUS_TYPE_INVALID);\n"); + WRITE_OR_LOSE ("error, "); - WRITE_OR_LOSE (" dbus_g_pending_call_unref (call);\n"); - WRITE_OR_LOSE (" return ret;\n"); + if (!write_args_for_direction (interface, method, channel, ARG_IN, error)) + goto io_lose; + + if (!write_args_for_direction (interface, method, channel, ARG_OUT, error)) + goto io_lose; - WRITE_OR_LOSE ("}\n\n"); + WRITE_OR_LOSE ("NULL);\n}\n\n"); } } return TRUE; |