if (entry == NULL)
return NULL;
- if (!_dbus_string_init (&entry->method, _DBUS_INT_MAX))
- dbus_free (entry);
+ if (!_dbus_string_init (&entry->method))
+ {
+ dbus_free (entry);
+ return NULL;
+ }
return entry;
}
const char *
dbus_address_entry_get_method (DBusAddressEntry *entry)
{
- const char *method;
-
- _dbus_string_get_const_data (&entry->method, &method);
-
- return method;
+ return _dbus_string_get_const_data (&entry->method);
}
/**
_dbus_assert (values != NULL);
if (_dbus_string_equal_c_str (keys->data, key))
- {
- const char *str;
+ return _dbus_string_get_const_data (values->data);
- _dbus_string_get_const_data (values->data, &str);
- return str;
- }
keys = _dbus_list_get_next_link (&entry->keys, keys);
values = _dbus_list_get_next_link (&entry->values, values);
}
* @param address the address.
* @param entry return location to an array of entries.
* @param array_len return location for array length.
- * @param result return location for result code.
+ * @param error address where an error can be returned.
* @returns #TRUE on success, #FALSE otherwise.
*/
dbus_bool_t
dbus_parse_address (const char *address,
DBusAddressEntry ***entry,
int *array_len,
- DBusResultCode *result)
+ DBusError *error)
{
DBusString str;
int pos, end_pos, len, i;
DBusList *entries, *link;
DBusAddressEntry **entry_array;
+ _DBUS_ASSERT_ERROR_IS_CLEAR (error);
+
_dbus_string_init_const (&str, address);
entries = NULL;
entry = create_entry ();
if (!entry)
{
- dbus_set_result (result, DBUS_RESULT_NO_MEMORY);
+ dbus_set_error (error, DBUS_ERROR_NO_MEMORY, NULL);
goto error;
}
/* Append the entry */
if (!_dbus_list_append (&entries, entry))
{
- dbus_set_result (result, DBUS_RESULT_NO_MEMORY);
+ dbus_set_error (error, DBUS_ERROR_NO_MEMORY, NULL);
dbus_address_entry_free (entry);
goto error;
}
/* Look for the colon : */
if (!_dbus_string_find_to (&str, pos, end_pos, ":", &found_pos))
{
- dbus_set_result (result, DBUS_RESULT_BAD_ADDRESS);
+ dbus_set_error (error, DBUS_ERROR_BAD_ADDRESS, "Address does not contain a colon");
goto error;
}
if (!_dbus_string_copy_len (&str, pos, found_pos - pos, &entry->method, 0))
{
- dbus_set_result (result, DBUS_RESULT_NO_MEMORY);
+ dbus_set_error (error, DBUS_ERROR_NO_MEMORY, NULL);
goto error;
}
if (!_dbus_string_find (&str, pos, "=", &equals_pos) ||
equals_pos == pos || equals_pos + 1 == end_pos)
{
- dbus_set_result (result, DBUS_RESULT_BAD_ADDRESS);
- goto error;
+ dbus_set_error (error, DBUS_ERROR_BAD_ADDRESS,
+ "'=' character not found or has no value following it");
+ goto error;
}
else
{
if (!key)
{
- dbus_set_result (result, DBUS_RESULT_NO_MEMORY);
+ dbus_set_error (error, DBUS_ERROR_NO_MEMORY, NULL);
goto error;
}
value = dbus_new0 (DBusString, 1);
if (!value)
{
- dbus_set_result (result, DBUS_RESULT_NO_MEMORY);
+ dbus_set_error (error, DBUS_ERROR_NO_MEMORY, NULL);
dbus_free (key);
goto error;
}
- if (!_dbus_string_init (key, _DBUS_INT_MAX))
+ if (!_dbus_string_init (key))
{
- dbus_set_result (result, DBUS_RESULT_NO_MEMORY);
+ dbus_set_error (error, DBUS_ERROR_NO_MEMORY, NULL);
dbus_free (key);
dbus_free (value);
goto error;
}
- if (!_dbus_string_init (value, _DBUS_INT_MAX))
+ if (!_dbus_string_init (value))
{
- dbus_set_result (result, DBUS_RESULT_NO_MEMORY);
+ dbus_set_error (error, DBUS_ERROR_NO_MEMORY, NULL);
_dbus_string_free (key);
dbus_free (key);
if (!_dbus_string_copy_len (&str, pos, equals_pos - pos, key, 0))
{
- dbus_set_result (result, DBUS_RESULT_NO_MEMORY);
+ dbus_set_error (error, DBUS_ERROR_NO_MEMORY, NULL);
_dbus_string_free (key);
_dbus_string_free (value);
if (!_dbus_string_copy_len (&str, equals_pos + 1, comma_pos - equals_pos - 1, value, 0))
{
- dbus_set_result (result, DBUS_RESULT_NO_MEMORY);
+ dbus_set_error (error, DBUS_ERROR_NO_MEMORY, NULL);
_dbus_string_free (key);
_dbus_string_free (value);
if (!_dbus_list_append (&entry->keys, key))
{
- dbus_set_result (result, DBUS_RESULT_NO_MEMORY);
+ dbus_set_error (error, DBUS_ERROR_NO_MEMORY, NULL);
_dbus_string_free (key);
_dbus_string_free (value);
if (!_dbus_list_append (&entry->values, value))
{
- dbus_set_result (result, DBUS_RESULT_NO_MEMORY);
+ dbus_set_error (error, DBUS_ERROR_NO_MEMORY, NULL);
_dbus_string_free (value);
dbus_free (value);
if (!entry_array)
{
- dbus_set_result (result, DBUS_RESULT_NO_MEMORY);
+ dbus_set_error (error, DBUS_ERROR_NO_MEMORY, NULL);
goto error;
}
_dbus_list_clear (&entries);
*entry = entry_array;
- dbus_set_result (result, DBUS_RESULT_SUCCESS);
return TRUE;
error:
link = _dbus_list_get_next_link (&entries, link);
}
+ _dbus_list_clear (&entries);
+
return FALSE;
}
{
DBusAddressEntry **entries;
int len;
- DBusResultCode result;
+ DBusError error;
+ dbus_error_init (&error);
+
if (!dbus_parse_address ("unix:path=/tmp/foo;debug:name=test,sliff=sloff;",
- &entries, &len, &result))
+ &entries, &len, &error))
_dbus_assert_not_reached ("could not parse address");
_dbus_assert (len == 2);
_dbus_assert (strcmp (dbus_address_entry_get_value (entries[0], "path"), "/tmp/foo") == 0);
dbus_address_entries_free (entries);
/* Different possible errors */
- if (dbus_parse_address ("foo", &entries, &len, &result))
+ if (dbus_parse_address ("foo", &entries, &len, &error))
_dbus_assert_not_reached ("Parsed incorrect address.");
-
- if (dbus_parse_address ("foo:bar", &entries, &len, &result))
+ else
+ dbus_error_free (&error);
+
+ if (dbus_parse_address ("foo:bar", &entries, &len, &error))
_dbus_assert_not_reached ("Parsed incorrect address.");
-
- if (dbus_parse_address ("foo:bar,baz", &entries, &len, &result))
+ else
+ dbus_error_free (&error);
+
+ if (dbus_parse_address ("foo:bar,baz", &entries, &len, &error))
_dbus_assert_not_reached ("Parsed incorrect address.");
-
- if (dbus_parse_address ("foo:bar=foo,baz", &entries, &len, &result))
+ else
+ dbus_error_free (&error);
+
+ if (dbus_parse_address ("foo:bar=foo,baz", &entries, &len, &error))
_dbus_assert_not_reached ("Parsed incorrect address.");
-
- if (dbus_parse_address ("foo:bar=foo;baz", &entries, &len, &result))
+ else
+ dbus_error_free (&error);
+
+ if (dbus_parse_address ("foo:bar=foo;baz", &entries, &len, &error))
_dbus_assert_not_reached ("Parsed incorrect address.");
-
- if (dbus_parse_address ("foo:=foo", &entries, &len, &result))
+ else
+ dbus_error_free (&error);
+
+ if (dbus_parse_address ("foo:=foo", &entries, &len, &error))
_dbus_assert_not_reached ("Parsed incorrect address.");
-
- if (dbus_parse_address ("foo:foo=", &entries, &len, &result))
+ else
+ dbus_error_free (&error);
+
+ if (dbus_parse_address ("foo:foo=", &entries, &len, &error))
_dbus_assert_not_reached ("Parsed incorrect address.");
+ else
+ dbus_error_free (&error);
return TRUE;
}