diff --git a/include/rjp.h b/include/rjp.h index 53aab7e..92ce6d7 100644 --- a/include/rjp.h +++ b/include/rjp.h @@ -137,10 +137,10 @@ size_t rjp_member_name_length(RJP_value* member); RJP_search_res rjp_search_member(const RJP_value* object, const char* search, size_t skip); //Search for first occurance of multiple keys. Returns first occurance of each. //Assumes dest is large enough to hold maximum num items. -size_t rjp_search_members(const RJP_value* object, size_t num, const char** searches, RJP_search_res* dest, size_t skip); +size_t rjp_search_members(const RJP_value* object, size_t num, const char* const* searches, RJP_search_res* dest, size_t skip); //Search for multiple occurances of multiple keys. Returns pointer to list of matches. //Returned pointer must be freed using rjp_free -RJP_search_res* rjp_search_members_multi(const RJP_value* object, size_t num, const char** searches, size_t* rsize, size_t skip); +RJP_search_res* rjp_search_members_multi(const RJP_value* object, size_t num, const char* const* searches, size_t* rsize, size_t skip); //Access first element of a json array RJP_value* rjp_get_element(const RJP_value* array); //Access next element of a json array given the previous element diff --git a/src/rjp.c b/src/rjp.c index bf9b480..0344a86 100644 --- a/src/rjp.c +++ b/src/rjp.c @@ -138,7 +138,7 @@ RJP_search_res rjp_search_member(const RJP_value* object, const char* search, si return (RJP_search_res){0}; } -size_t rjp_search_members(const RJP_value* object, size_t num, const char** searches, RJP_search_res* dest, size_t skip){ +size_t rjp_search_members(const RJP_value* object, size_t num, const char* const* searches, RJP_search_res* dest, size_t skip){ const char** tmp = rjp_alloc(num*sizeof(char*)); for(size_t i = 0;i < num;++i){ tmp[i] = searches[i]; @@ -151,25 +151,22 @@ size_t rjp_search_members(const RJP_value* object, size_t num, const char** sear for(;member;member = rjp_next_member(member),++objindex){ for(size_t i = 0;i < num;++i){ - if(searches[i] == NULL) + if(tmp[i] == NULL) continue; - if(!strcmp(((RJP_object_member*)member)->name.value, searches[i])){ + if(!strcmp(((RJP_object_member*)member)->name.value, tmp[i])){ dest[i].value = member; dest[i].searchindex = i; dest[i].objindex = objindex; - searches[i] = NULL; + tmp[i] = NULL; ++matches; break; } } } - for(size_t i = 0;i < num;++i){ - searches[i] = tmp[i]; - } rjp_free(tmp); return matches; } -RJP_search_res* rjp_search_members_multi(const RJP_value* object, size_t num, const char** searches, size_t* rsize, size_t skip){ +RJP_search_res* rjp_search_members_multi(const RJP_value* object, size_t num, const char* const* searches, size_t* rsize, size_t skip){ RJP_search_res* ret = rjp_alloc(num*sizeof(RJP_search_res)); size_t ret_size = num; size_t j = 0;