summaryrefslogtreecommitdiffstats
path: root/dbus/dbus-message.c
diff options
context:
space:
mode:
Diffstat (limited to 'dbus/dbus-message.c')
-rw-r--r--dbus/dbus-message.c46
1 files changed, 28 insertions, 18 deletions
diff --git a/dbus/dbus-message.c b/dbus/dbus-message.c
index 041bf667..3bd92803 100644
--- a/dbus/dbus-message.c
+++ b/dbus/dbus-message.c
@@ -543,14 +543,14 @@ dbus_message_append_byte_array (DBusMessage *message,
* @param message the message
* @param first_field_type the first field type
* @param ... location for first field value, then list of type-location pairs
- * @returns #TRUE on success
+ * @returns result code
*/
-dbus_bool_t
+DBusResultCode
dbus_message_get_fields (DBusMessage *message,
int first_field_type,
...)
{
- dbus_bool_t retval;
+ DBusResultCode retval;
va_list var_args;
va_start (var_args, first_field_type);
@@ -570,13 +570,15 @@ dbus_message_get_fields (DBusMessage *message,
* to the arg that's bad, as that would be a security hole
* (allow one app to force another to leak memory)
*
+ * @todo We need to free the field data when an error occurs.
+ *
* @see dbus_message_get_fields
* @param message the message
* @param first_field_type type of the first field
* @param var_args return location for first field, followed by list of type/location pairs
- * @returns #TRUE on success
+ * @returns result code
*/
-dbus_bool_t
+DBusResultCode
dbus_message_get_fields_valist (DBusMessage *message,
int first_field_type,
va_list var_args)
@@ -598,13 +600,13 @@ dbus_message_get_fields_valist (DBusMessage *message,
if (msg_type != spec_type)
{
- _dbus_warn ("Field %d is specified to be of type \"%s\", but "
- "is actually of type \"%s\"\n", i,
- _dbus_type_to_string (spec_type),
- _dbus_type_to_string (msg_type));
+ _dbus_verbose ("Field %d is specified to be of type \"%s\", but "
+ "is actually of type \"%s\"\n", i,
+ _dbus_type_to_string (spec_type),
+ _dbus_type_to_string (msg_type));
dbus_message_iter_unref (iter);
- return FALSE;
+ return DBUS_RESULT_INVALID_FIELDS;
}
switch (spec_type)
@@ -645,6 +647,10 @@ dbus_message_get_fields_valist (DBusMessage *message,
ptr = va_arg (var_args, char **);
*ptr = dbus_message_iter_get_string (iter);
+
+ if (!*ptr)
+ return DBUS_RESULT_NO_MEMORY;
+
break;
}
@@ -657,6 +663,10 @@ dbus_message_get_fields_valist (DBusMessage *message,
len = va_arg (var_args, int *);
*ptr = dbus_message_iter_get_byte_array (iter, len);
+
+ if (!*ptr)
+ return DBUS_RESULT_NO_MEMORY;
+
break;
}
default:
@@ -666,16 +676,16 @@ dbus_message_get_fields_valist (DBusMessage *message,
spec_type = va_arg (var_args, int);
if (spec_type != 0 && !dbus_message_iter_next (iter))
{
- _dbus_warn ("More fields than exist in the message were specified\n");
+ _dbus_verbose ("More fields than exist in the message were specified\n");
dbus_message_iter_unref (iter);
- return FALSE;
+ return DBUS_RESULT_INVALID_FIELDS;
}
i++;
}
dbus_message_iter_unref (iter);
- return TRUE;
+ return DBUS_RESULT_SUCCESS;
}
/**
@@ -1338,11 +1348,11 @@ _dbus_message_test (void)
DBUS_TYPE_DOUBLE, 3.14159,
0);
- if (!dbus_message_get_fields (message,
- DBUS_TYPE_INT32, &our_int,
- DBUS_TYPE_STRING, &our_str,
- DBUS_TYPE_DOUBLE, &our_double,
- 0))
+ if (dbus_message_get_fields (message,
+ DBUS_TYPE_INT32, &our_int,
+ DBUS_TYPE_STRING, &our_str,
+ DBUS_TYPE_DOUBLE, &our_double,
+ 0) != DBUS_RESULT_SUCCESS)
_dbus_assert_not_reached ("Could not get fields");
if (our_int != -0x12345678)