int nResults = Reply.GetNumResults();
Result* pResult;
- maps_address_list_h address_list;
+ maps_address_list_h address_list = NULL;
maps_address_list_create(&address_list);
maps_address_h pAddr = NULL;
String *additionalDataValue = NULL;
for (size_t i = 0; i < (size_t)nResults; i++)
{
- maps_error_e error = (maps_error_e)maps_address_create(&pAddr);
+ if ((pResult = (Result*)Reply.GetResult(i)) == NULL) continue;
+ if (maps_address_create(&pAddr) != MAPS_ERROR_NONE) continue;
- if(error == MAPS_ERROR_NONE) {
- pResult = (Result*)Reply.GetResult(i);
- if (pResult) {
- Address tmpAddr = (pResult->GetLocation()).GetAddress();
+ Address tmpAddr = (pResult->GetLocation()).GetAddress();
- if(!tmpAddr.GetHouseNumber().empty())
- maps_address_set_building_number(pAddr, tmpAddr.GetHouseNumber().c_str());
+ if(!tmpAddr.GetHouseNumber().empty())
+ maps_address_set_building_number(pAddr, tmpAddr.GetHouseNumber().c_str());
- if(!tmpAddr.GetStreet().empty())
- maps_address_set_street(pAddr, tmpAddr.GetStreet().c_str());
+ if(!tmpAddr.GetStreet().empty())
+ maps_address_set_street(pAddr, tmpAddr.GetStreet().c_str());
- if(!tmpAddr.GetDistrict().empty())
- maps_address_set_district(pAddr, tmpAddr.GetDistrict().c_str());
+ if(!tmpAddr.GetDistrict().empty())
+ maps_address_set_district(pAddr, tmpAddr.GetDistrict().c_str());
- if(!tmpAddr.GetCity().empty())
- maps_address_set_city(pAddr, tmpAddr.GetCity().c_str());
+ if(!tmpAddr.GetCity().empty())
+ maps_address_set_city(pAddr, tmpAddr.GetCity().c_str());
- additionalDataValue = (String*)tmpAddr.GetAdditionalDataValue("CountyName");
- if (additionalDataValue && !additionalDataValue->empty())
- maps_address_set_county(pAddr, additionalDataValue->c_str());
- else if (!tmpAddr.GetCounty().empty())
- maps_address_set_county(pAddr, tmpAddr.GetCounty().c_str());
+ additionalDataValue = (String*)tmpAddr.GetAdditionalDataValue("CountyName");
+ if (additionalDataValue && !additionalDataValue->empty())
+ maps_address_set_county(pAddr, additionalDataValue->c_str());
+ else if (!tmpAddr.GetCounty().empty())
+ maps_address_set_county(pAddr, tmpAddr.GetCounty().c_str());
- additionalDataValue = (String*)tmpAddr.GetAdditionalDataValue("StateName");
- if (additionalDataValue && !additionalDataValue->empty())
- maps_address_set_state(pAddr, additionalDataValue->c_str());
- else if (!tmpAddr.GetState().empty())
- maps_address_set_state(pAddr, tmpAddr.GetState().c_str());
+ additionalDataValue = (String*)tmpAddr.GetAdditionalDataValue("StateName");
+ if (additionalDataValue && !additionalDataValue->empty())
+ maps_address_set_state(pAddr, additionalDataValue->c_str());
+ else if (!tmpAddr.GetState().empty())
+ maps_address_set_state(pAddr, tmpAddr.GetState().c_str());
- additionalDataValue = (String*)tmpAddr.GetAdditionalDataValue("CountryName");
- if (additionalDataValue && !additionalDataValue->empty())
- maps_address_set_country(pAddr, additionalDataValue->c_str());
- else if (!tmpAddr.GetCountry().empty())
- maps_address_set_country(pAddr, tmpAddr.GetCountry().c_str());
+ additionalDataValue = (String*)tmpAddr.GetAdditionalDataValue("CountryName");
+ if (additionalDataValue && !additionalDataValue->empty())
+ maps_address_set_country(pAddr, additionalDataValue->c_str());
+ else if (!tmpAddr.GetCountry().empty())
+ maps_address_set_country(pAddr, tmpAddr.GetCountry().c_str());
- if(!tmpAddr.GetCountry().empty())
- maps_address_set_country_code(pAddr, tmpAddr.GetCountry().c_str());
+ if(!tmpAddr.GetCountry().empty())
+ maps_address_set_country_code(pAddr, tmpAddr.GetCountry().c_str());
- if(!tmpAddr.GetPostalCode().empty())
- maps_address_set_postal_code(pAddr, tmpAddr.GetPostalCode().c_str());
+ if(!tmpAddr.GetPostalCode().empty())
+ maps_address_set_postal_code(pAddr, tmpAddr.GetPostalCode().c_str());
- if(!tmpAddr.GetLabel().empty())
- maps_address_set_freetext(pAddr, tmpAddr.GetLabel().c_str());
- }
- }
- maps_address_list_append(address_list, pAddr);
+ if(!tmpAddr.GetLabel().empty())
+ maps_address_set_freetext(pAddr, tmpAddr.GetLabel().c_str());
+
+ if (maps_address_list_append(address_list, pAddr) != MAPS_ERROR_NONE)
+ maps_address_destroy(pAddr);
}
+
+ int address_list_length = 0;
+ maps_address_list_get_length(address_list, &address_list_length);
+
if (m_bCanceled || !m_pCbFunc) {
maps_address_list_destroy(address_list);
- } else if (nResults <= 0) {
+ } else if (address_list_length <= 0) {
+ maps_address_list_destroy(address_list);
((maps_service_multi_reverse_geocode_cb)m_pCbFunc)(MAPS_ERROR_NOT_FOUND, m_nReqId, 0, NULL, m_pUserData);
} else {
- ((maps_service_multi_reverse_geocode_cb)m_pCbFunc)(MAPS_ERROR_NONE, m_nReqId, nResults, address_list, m_pUserData);
+ ((maps_service_multi_reverse_geocode_cb)m_pCbFunc)(MAPS_ERROR_NONE, m_nReqId, address_list_length, address_list, m_pUserData);
}
delete this;