From e537e421ff4f092621fcd9f6b51526a017ad020c Mon Sep 17 00:00:00 2001 From: Anders Carlsson Date: Sun, 16 Mar 2003 13:32:10 +0000 Subject: 2003-03-16 Anders Carlsson * dbus/dbus-connection.c: (dbus_connection_send_with_reply_and_block): Decrease connection->n_incoming when removing an entry from the list. * dbus/dbus-dict.c: (dbus_dict_entry_free), (dbus_dict_set_boolean_array), (dbus_dict_set_int32_array), (dbus_dict_set_uint32_array), (dbus_dict_set_double_array), (dbus_dict_set_byte_array), (dbus_dict_set_string_array), (dbus_dict_get_boolean_array), (dbus_dict_get_double_array), (dbus_dict_get_byte_array): Handle NULL arrays and strings. Also add support for byte arrays. * dbus/dbus-marshal.c: (_dbus_marshal_byte_array), (_dbus_marshal_dict), (_dbus_demarshal_byte_array), (_dbus_demarshal_int32_array), (_dbus_demarshal_uint32_array), (_dbus_demarshal_double_array), (_dbus_demarshal_string_array), (_dbus_demarshal_dict), (demarshal_and_validate_len), (_dbus_marshal_validate_arg), (_dbus_marshal_test): * dbus/dbus-marshal.h: Add support for marshalling and demarshalling empty arrays and strings. * dbus/dbus-message.c: (dbus_message_append_args_valist), (dbus_message_append_string_array), (dbus_message_iter_get_boolean), (dbus_message_iter_get_boolean_array), (dbus_message_iter_get_int32_array), (dbus_message_iter_get_uint32_array), (dbus_message_iter_get_double_array), (dbus_message_iter_get_byte_array), (dbus_message_iter_get_string_array), (dbus_message_iter_get_dict), (check_message_handling): Add support for getting empty arrays and dicts. * dbus/dbus-string.c: (_dbus_string_validate_utf8): Don't do any validation at all for now, that's better than just checking for ASCII. * test/data/valid-messages/emptiness.message: New test message with lots of empty arrays. --- dbus/dbus-message.c | 66 +++++++++++++++++++++++++---------------------------- 1 file changed, 31 insertions(+), 35 deletions(-) (limited to 'dbus/dbus-message.c') diff --git a/dbus/dbus-message.c b/dbus/dbus-message.c index 7d425772..a3b713ee 100644 --- a/dbus/dbus-message.c +++ b/dbus/dbus-message.c @@ -1167,7 +1167,7 @@ dbus_message_append_args_valist (DBusMessage *message, case DBUS_TYPE_STRING_ARRAY: { int len; - const char **data; + char **data; data = va_arg (var_args, const char **); len = va_arg (var_args, int); @@ -1184,6 +1184,7 @@ dbus_message_append_args_valist (DBusMessage *message, if (!dbus_message_append_dict (message, dict)) goto enomem; + break; } default: _dbus_warn ("Unknown field type %d\n", type); @@ -1487,9 +1488,9 @@ dbus_message_append_byte_array (DBusMessage *message, * @returns #TRUE on success */ dbus_bool_t -dbus_message_append_string_array (DBusMessage *message, - const char **value, - int len) +dbus_message_append_string_array (DBusMessage *message, + const char **value, + int len) { _dbus_assert (!message->locked); @@ -1497,7 +1498,7 @@ dbus_message_append_string_array (DBusMessage *message, return FALSE; if (!_dbus_marshal_string_array (&message->body, message->byte_order, - value, len)) + (const char **)value, len)) { _dbus_string_shorten (&message->body, 1); return FALSE; @@ -1991,7 +1992,6 @@ dbus_message_iter_get_boolean (DBusMessageIter *iter) _dbus_assert (dbus_message_iter_get_arg_type (iter) == DBUS_TYPE_BOOLEAN); value = _dbus_string_get_byte (&iter->message->body, iter->pos + 1); - iter->pos += 2; return value; } @@ -2067,10 +2067,8 @@ dbus_message_iter_get_boolean_array (DBusMessageIter *iter, { _dbus_assert (dbus_message_iter_get_arg_type (iter) == DBUS_TYPE_BOOLEAN_ARRAY); - *value = _dbus_demarshal_byte_array (&iter->message->body, iter->message->byte_order, - iter->pos + 1, NULL, len); - - if (!*value) + if (!_dbus_demarshal_byte_array (&iter->message->body, iter->message->byte_order, + iter->pos + 1, NULL, value, len)) return FALSE; else return TRUE; @@ -2093,10 +2091,8 @@ dbus_message_iter_get_int32_array (DBusMessageIter *iter, { _dbus_assert (dbus_message_iter_get_arg_type (iter) == DBUS_TYPE_INT32_ARRAY); - *value = _dbus_demarshal_int32_array (&iter->message->body, iter->message->byte_order, - iter->pos + 1, NULL, len); - - if (!*value) + if (!_dbus_demarshal_int32_array (&iter->message->body, iter->message->byte_order, + iter->pos + 1, NULL, value, len)) return FALSE; else return TRUE; @@ -2119,10 +2115,8 @@ dbus_message_iter_get_uint32_array (DBusMessageIter *iter, { _dbus_assert (dbus_message_iter_get_arg_type (iter) == DBUS_TYPE_UINT32_ARRAY); - *value = _dbus_demarshal_uint32_array (&iter->message->body, iter->message->byte_order, - iter->pos + 1, NULL, len); - - if (!*value) + if (!_dbus_demarshal_uint32_array (&iter->message->body, iter->message->byte_order, + iter->pos + 1, NULL, value, len)) return FALSE; else return TRUE; @@ -2145,10 +2139,8 @@ dbus_message_iter_get_double_array (DBusMessageIter *iter, { _dbus_assert (dbus_message_iter_get_arg_type (iter) == DBUS_TYPE_DOUBLE_ARRAY); - *value = _dbus_demarshal_double_array (&iter->message->body, iter->message->byte_order, - iter->pos + 1, NULL, len); - - if (!*value) + if (!_dbus_demarshal_double_array (&iter->message->body, iter->message->byte_order, + iter->pos + 1, NULL, value, len)) return FALSE; else return TRUE; @@ -2170,11 +2162,9 @@ dbus_message_iter_get_byte_array (DBusMessageIter *iter, int *len) { _dbus_assert (dbus_message_iter_get_arg_type (iter) == DBUS_TYPE_BYTE_ARRAY); - - *value = _dbus_demarshal_byte_array (&iter->message->body, iter->message->byte_order, - iter->pos + 1, NULL, len); - if (!*value) + if (!_dbus_demarshal_byte_array (&iter->message->body, iter->message->byte_order, + iter->pos + 1, NULL, value, len)) return FALSE; else return TRUE; @@ -2202,10 +2192,8 @@ dbus_message_iter_get_string_array (DBusMessageIter *iter, { _dbus_assert (dbus_message_iter_get_arg_type (iter) == DBUS_TYPE_STRING_ARRAY); - *value = _dbus_demarshal_string_array (&iter->message->body, iter->message->byte_order, - iter->pos + 1, NULL, len); - - if (!*value) + if (!_dbus_demarshal_string_array (&iter->message->body, iter->message->byte_order, + iter->pos + 1, NULL, value, len)) return FALSE; else return TRUE; @@ -2226,10 +2214,8 @@ dbus_message_iter_get_dict (DBusMessageIter *iter, { _dbus_assert (dbus_message_iter_get_arg_type (iter) == DBUS_TYPE_DICT); - *dict = _dbus_demarshal_dict (&iter->message->body, iter->message->byte_order, - iter->pos + 1, NULL); - - if (!*dict) + if (!_dbus_demarshal_dict (&iter->message->body, iter->message->byte_order, + iter->pos + 1, NULL, dict)) return FALSE; else return TRUE; @@ -3076,6 +3062,17 @@ check_message_handling (DBusMessage *message) dbus_free (str); } break; + case DBUS_TYPE_BOOLEAN_ARRAY: + { + unsigned char *values; + int len; + + if (!dbus_message_iter_get_boolean_array (iter, &values, &len)) + return FALSE; + + dbus_free (values); + } + break; case DBUS_TYPE_INT32_ARRAY: { dbus_int32_t *values; @@ -3127,7 +3124,6 @@ check_message_handling (DBusMessage *message) if (!dbus_message_iter_get_dict (iter, &dict)) return FALSE; - dbus_dict_unref (dict); } break; -- cgit