diff options
author | Mike Gorse <mgorse@novell.com> | 2010-11-28 14:48:52 -0500 |
---|---|---|
committer | Mike Gorse <mgorse@novell.com> | 2010-11-28 14:48:52 -0500 |
commit | febc57fdd883c96a471a970f6801af9d5a5bdf92 (patch) | |
tree | 31b385ee12ddebc4ca1ffe62901bdedd52f1b39d /dbind | |
parent | ba62b6e42a04872513574b1abd2e02d44c2a6468 (diff) | |
download | at-spi2-core-febc57fdd883c96a471a970f6801af9d5a5bdf92.tar.gz |
Really commit fixes; make unit tests pass
Diffstat (limited to 'dbind')
-rw-r--r-- | dbind/dbind-any.c | 74 | ||||
-rw-r--r-- | dbind/dbind-any.h | 6 | ||||
-rw-r--r-- | dbind/dbind.c | 11 |
3 files changed, 74 insertions, 17 deletions
diff --git a/dbind/dbind-any.c b/dbind/dbind-any.c index 8b224480..088a2076 100644 --- a/dbind/dbind-any.c +++ b/dbind/dbind-any.c @@ -434,7 +434,7 @@ dbind_any_marshal (DBusMessageIter *iter, void dbind_any_marshal_va (DBusMessageIter *iter, const char **arg_types, - va_list *args) + va_list args) { const char *p = *arg_types; @@ -460,16 +460,16 @@ dbind_any_marshal_va (DBusMessageIter *iter, case DBUS_TYPE_UINT16: case DBUS_TYPE_INT32: case DBUS_TYPE_UINT32: - intarg = va_arg (*args, int); + intarg = va_arg (args, int); arg = &intarg; break; case DBUS_TYPE_INT64: case DBUS_TYPE_UINT64: - int64arg = va_arg (*args, dbus_int64_t); + int64arg = va_arg (args, dbus_int64_t); arg = &int64arg; break; case DBUS_TYPE_DOUBLE: - doublearg = va_arg (*args, double); + doublearg = va_arg (args, double); arg = &doublearg; break; /* ptr types */ @@ -478,21 +478,21 @@ dbind_any_marshal_va (DBusMessageIter *iter, case DBUS_TYPE_SIGNATURE: case DBUS_TYPE_ARRAY: case DBUS_TYPE_DICT_ENTRY: - ptrarg = va_arg (*args, void *); + ptrarg = va_arg (args, void *); arg = &ptrarg; break; case DBUS_STRUCT_BEGIN_CHAR: - ptrarg = va_arg (*args, void *); + ptrarg = va_arg (args, void *); arg = ptrarg; break; case DBUS_DICT_ENTRY_BEGIN_CHAR: - ptrarg = va_arg (*args, void *); + ptrarg = va_arg (args, void *); arg = ptrarg; break; case DBUS_TYPE_VARIANT: fprintf (stderr, "No variant support yet - very toolkit specific\n"); - ptrarg = va_arg (*args, void *); + ptrarg = va_arg (args, void *); arg = &ptrarg; break; default: @@ -635,11 +635,65 @@ dbind_any_demarshal (DBusMessageIter *iter, void dbind_any_demarshal_va (DBusMessageIter *iter, const char **arg_types, - va_list *args) + va_list args) { const char *p = *arg_types; + + /* Pass in args */ + for (;*p != '\0' && *p != '=';) { + int intarg; + void *ptrarg; + double doublearg; + dbus_int64_t int64arg; + void *arg = NULL; + + switch (*p) { + case DBUS_TYPE_BYTE: + case DBUS_TYPE_BOOLEAN: + case DBUS_TYPE_INT16: + case DBUS_TYPE_UINT16: + case DBUS_TYPE_INT32: + case DBUS_TYPE_UINT32: + intarg = va_arg (args, int); + break; + case DBUS_TYPE_INT64: + case DBUS_TYPE_UINT64: + int64arg = va_arg (args, dbus_int64_t); + break; + case DBUS_TYPE_DOUBLE: + doublearg = va_arg (args, double); + break; + /* ptr types */ + case DBUS_TYPE_STRING: + case DBUS_TYPE_OBJECT_PATH: + case DBUS_TYPE_SIGNATURE: + case DBUS_TYPE_ARRAY: + case DBUS_TYPE_DICT_ENTRY: + ptrarg = va_arg (args, void *); + break; + case DBUS_STRUCT_BEGIN_CHAR: + ptrarg = va_arg (args, void *); + break; + case DBUS_DICT_ENTRY_BEGIN_CHAR: + ptrarg = va_arg (args, void *); + break; + + case DBUS_TYPE_VARIANT: + fprintf (stderr, "No variant support yet - very toolkit specific\n"); + ptrarg = va_arg (args, void *); + break; + default: + fprintf (stderr, "Unknown / invalid arg type %c\n", *p); + break; + } + p++; + } + + if (p [0] == '=' && p[1] == '>') + p += 2; + for (;*p != '\0';) { - void *arg = va_arg (*args, void *); + void *arg = va_arg (args, void *); dbind_any_demarshal (iter, &p, &arg); } } diff --git a/dbind/dbind-any.h b/dbind/dbind-any.h index ae69caad..094b7166 100644 --- a/dbind/dbind-any.h +++ b/dbind/dbind-any.h @@ -11,8 +11,8 @@ void dbind_any_marshal (DBusMessageIter *iter, void **val); void dbind_any_marshal_va (DBusMessageIter *iter, - const const char **arg_types, - va_list *args); + const char **arg_types, + va_list args); void dbind_any_demarshal (DBusMessageIter *iter, const char **type, @@ -20,7 +20,7 @@ void dbind_any_demarshal (DBusMessageIter *iter, void dbind_any_demarshal_va (DBusMessageIter *iter, const char **arg_types, - va_list *args); + va_list args); void dbind_any_free (const char *type, void *ptr_to_ptr); diff --git a/dbind/dbind.c b/dbind/dbind.c index 9f284e92..a5da81d9 100644 --- a/dbind/dbind.c +++ b/dbind/dbind.c @@ -80,7 +80,9 @@ dbind_method_call_reentrant_va (DBusConnection *cnx, DBusMessageIter iter; DBusError *err, real_err; const char *p; + va_list args_demarshal; + va_copy (args_demarshal, args); if (opt_error) err = opt_error; else { @@ -94,7 +96,7 @@ dbind_method_call_reentrant_va (DBusConnection *cnx, p = arg_types; dbus_message_iter_init_append (msg, &iter); - dbind_any_marshal_va (&iter, &p, &args); + dbind_any_marshal_va (&iter, &p, args); reply = dbind_send_and_allow_reentry (cnx, msg, err); if (!reply) @@ -110,9 +112,9 @@ dbind_method_call_reentrant_va (DBusConnection *cnx, if (p[0] == '=' && p[1] == '>') { DBusMessageIter iter; - p += 2; dbus_message_iter_init (reply, &iter); - dbind_any_demarshal_va (&iter, &p, &args); + p = arg_types; + dbind_any_demarshal_va (&iter, &p, args_demarshal); } success = TRUE; @@ -126,6 +128,7 @@ out: if (err == &real_err) dbus_error_free (err); + va_end (args_demarshal); return success; } @@ -203,7 +206,7 @@ dbind_emit_signal_va (DBusConnection *cnx, p = arg_types; dbus_message_iter_init_append (msg, &iter); - dbind_any_marshal_va (&iter, &p, &args); + dbind_any_marshal_va (&iter, &p, args); if (!dbus_connection_send (cnx, msg, NULL)) goto out; |