X-Git-Url: http://review.tizen.org/git/?a=blobdiff_plain;f=dbus%2Fdbus-address.c;h=d309922218713736342f7e5105c87e2b47090516;hb=fa05de9230d62e7c427b5313796fc6ccd4d0ff60;hp=4c584bc0110f172097aa748fa16b5cf309288517;hpb=6fc53eb13073722f6f44d0af869c7ff1eb3f206e;p=platform%2Fupstream%2Fdbus.git diff --git a/dbus/dbus-address.c b/dbus/dbus-address.c index 4c584bc..d309922 100644 --- a/dbus/dbus-address.c +++ b/dbus/dbus-address.c @@ -27,9 +27,9 @@ #include "dbus-list.h" /** - * @defgroup DBusAddress address parsing + * @defgroup DBusAddress Address parsing * @ingroup DBus - * @brief Parsing addresses to DBus servers. + * @brief Parsing addresses of D-BUS servers. * * @{ */ @@ -56,7 +56,8 @@ dbus_address_entry_free (DBusAddressEntry *entry) link = _dbus_list_get_next_link (&entry->keys, link); } - + _dbus_list_clear (&entry->keys); + link = _dbus_list_get_first_link (&entry->values); while (link != NULL) { @@ -65,6 +66,7 @@ dbus_address_entry_free (DBusAddressEntry *entry) link = _dbus_list_get_next_link (&entry->values, link); } + _dbus_list_clear (&entry->values); dbus_free (entry); } @@ -73,8 +75,6 @@ dbus_address_entry_free (DBusAddressEntry *entry) /** * Frees a #NULL-terminated array of address entries. * - * @todo dbus_address_entry_free() seems to leak list nodes - * * @param entries the array. */ void @@ -97,8 +97,11 @@ create_entry (void) 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; } @@ -113,11 +116,7 @@ create_entry (void) 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); } /** @@ -141,12 +140,8 @@ dbus_address_entry_get_value (DBusAddressEntry *entry, _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); } @@ -167,20 +162,22 @@ dbus_address_entry_get_value (DBusAddressEntry *entry, * @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; @@ -196,7 +193,7 @@ dbus_parse_address (const char *address, entry = create_entry (); if (!entry) { - dbus_set_result (result, DBUS_RESULT_NO_MEMORY); + dbus_set_error (error, DBUS_ERROR_NO_MEMORY, NULL); goto error; } @@ -204,7 +201,7 @@ dbus_parse_address (const char *address, /* 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; } @@ -216,13 +213,13 @@ dbus_parse_address (const char *address, /* 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; } @@ -238,8 +235,9 @@ dbus_parse_address (const char *address, 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 { @@ -250,30 +248,30 @@ dbus_parse_address (const char *address, 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); @@ -283,7 +281,7 @@ dbus_parse_address (const char *address, 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); @@ -294,7 +292,7 @@ dbus_parse_address (const char *address, 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); @@ -305,7 +303,7 @@ dbus_parse_address (const char *address, 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); @@ -316,7 +314,7 @@ dbus_parse_address (const char *address, 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); @@ -336,7 +334,7 @@ dbus_parse_address (const char *address, if (!entry_array) { - dbus_set_result (result, DBUS_RESULT_NO_MEMORY); + dbus_set_error (error, DBUS_ERROR_NO_MEMORY, NULL); goto error; } @@ -355,7 +353,6 @@ dbus_parse_address (const char *address, _dbus_list_clear (&entries); *entry = entry_array; - dbus_set_result (result, DBUS_RESULT_SUCCESS); return TRUE; error: @@ -367,6 +364,8 @@ dbus_parse_address (const char *address, link = _dbus_list_get_next_link (&entries, link); } + _dbus_list_clear (&entries); + return FALSE; } @@ -382,10 +381,12 @@ _dbus_address_test (void) { 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); @@ -395,26 +396,40 @@ _dbus_address_test (void) 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; }