diff options
author | Colin Walters <walters@verbum.org> | 2005-07-10 22:54:19 +0000 |
---|---|---|
committer | Colin Walters <walters@verbum.org> | 2005-07-10 22:54:19 +0000 |
commit | 8c095eea8fbe2f8c219bdb2aebcf61e4e3993f53 (patch) | |
tree | af9030f8b45381f290c89b793e067a588c6d6353 /glib/dbus-gvalue-utils.c | |
parent | 745b19d640e657118b298c6b7cc37798af878a5a (diff) |
2005-07-10 Colin Walters <walters@verbum.org>
* doc/TODO: Knock off some GLib items with this patch.
* glib/dbus-gvalue-utils.c (_dbus_gtype_can_signal_error)
(_dbus_gvalue_signals_error): New functions.
* glib/dbus-gvalue-utils.h: Prototype them.
* glib/dbus-gobject.c (arg_iterate): Update to handle return vals
and change to not output const/retval flags for input args. All
callers updated.
(invoke_object_method): Refactor to handle return values. Add
some more comments in various places. Remove debug g_print.
* glib/dbus-binding-tool-glib.h (DBUS_GLIB_ANNOTATION_RETURNVAL): New.
* glib/dbus-binding-tool-glib.c (dbus_g_type_get_marshal_name):
Handle G_TYPE_NONE.
(compute_gsignature): New function; refactored from code from
compute_marshaller and compute_marshaller_name. Enhance to
handle return values and async ops more cleanly. Update for
async ops returning NONE instead of BOOLEAN.
(compute_marshaller, compute_marshaller_name): Call compute_gsignature
and output appropriate string.
(generate_glue): Handle return value annotation. Also don't dump
constness flag for input arguments.
* glib/Makefile.am (DBUS_GLIB_INTERNALS): New variable; contains
files shared between installed library and utilities.
(libdbus_glib_1_la_SOURCES): Move some stuf into DBUS_GLIB_INTERNALS.
(libdbus_gtool_la_SOURCES): Suck in DBUS_GLIB_INTERNALS so the
binding tool can access gtype utility functions.
* test/glib/test-service-glib.c:
* test/glib/test-service-glib.xml:
* test/glib/test-dbus-glib.c: Add some tests for return values.
Diffstat (limited to 'glib/dbus-gvalue-utils.c')
-rw-r--r-- | glib/dbus-gvalue-utils.c | 54 |
1 files changed, 54 insertions, 0 deletions
diff --git a/glib/dbus-gvalue-utils.c b/glib/dbus-gvalue-utils.c index b17eee16..af2fff19 100644 --- a/glib/dbus-gvalue-utils.c +++ b/glib/dbus-gvalue-utils.c @@ -206,6 +206,58 @@ dbus_gvalue_take (GValue *value, return TRUE; } +gboolean +_dbus_gtype_can_signal_error (GType gtype) +{ + switch (gtype) + { + case G_TYPE_BOOLEAN: + case G_TYPE_INT: + case G_TYPE_UINT: + case G_TYPE_STRING: + case G_TYPE_BOXED: + case G_TYPE_OBJECT: + return TRUE; + default: + return FALSE; + } +} + +gboolean +_dbus_gvalue_signals_error (const GValue *value) +{ + /* Hardcoded rules for return value semantics for certain + * types. Perhaps in the future we'd want an annotation + * specifying which return values are errors, but in + * reality people will probably just use boolean and + * boxed, and there the semantics are pretty standard. + */ + switch (G_TYPE_FUNDAMENTAL (G_VALUE_TYPE (value))) + { + case G_TYPE_BOOLEAN: + return (g_value_get_boolean (value) == FALSE); + break; + case G_TYPE_INT: + return (g_value_get_int (value) < 0); + break; + case G_TYPE_UINT: + return (g_value_get_uint (value) == 0); + break; + case G_TYPE_STRING: + return (g_value_get_string (value) == NULL); + break; + case G_TYPE_BOXED: + return (g_value_get_boxed (value) == NULL); + break; + case G_TYPE_OBJECT: + return (g_value_get_boxed (value) == NULL); + break; + default: + g_assert_not_reached (); + } +} + + static gboolean hash_func_from_gtype (GType gtype, GHashFunc *func) { @@ -1061,4 +1113,6 @@ _dbus_gvalue_utils_test (const char *datadir) return TRUE; } + + #endif /* DBUS_BUILD_TESTS */ |