static zbx_hash_t zbx_kv_hash(const void *data)
const zbx_kv_t *kv = (const zbx_kv_t *)data;
return ZBX_DEFAULT_STRING_HASH_ALGO(kv->key, strlen(kv->key), ZBX_DEFAULT_HASH_SEED);
static int zbx_kv_compare(const void *d1, const void *d2)
return strcmp(((const zbx_kv_t *)d1)->key, ((const zbx_kv_t *)d2)->key);
static void zbx_kv_clean(void *data)
zbx_kv_t *kv = (zbx_kv_t *)data;
void zbx_kvs_create(zbx_kvs_t *kvs, size_t init_size)
zbx_hashset_create_ext(kvs, init_size, zbx_kv_hash, zbx_kv_compare, zbx_kv_clean,
ZBX_DEFAULT_MEM_MALLOC_FUNC, ZBX_DEFAULT_MEM_REALLOC_FUNC, ZBX_DEFAULT_MEM_FREE_FUNC);
void zbx_kvs_clear(zbx_kvs_t *kvs)
void zbx_kvs_destroy(zbx_kvs_t *kvs)
zbx_hashset_destroy(kvs);
zbx_kv_t *zbx_kvs_search(zbx_kvs_t *kvs, const zbx_kv_t *data)
return zbx_hashset_search(kvs, data);
void zbx_kvs_from_json_get(const struct zbx_json_parse *jp_kvs, zbx_kvs_t *kvs)
char key[MAX_STRING_LEN], *value = NULL;
const char *pnext = NULL;
while (NULL != (pnext = zbx_json_pair_next(jp_kvs, pnext, key, sizeof(key))))
if (NULL != (zbx_hashset_search(kvs, &kv_local)))
zabbix_log(LOG_LEVEL_DEBUG, "key '%s' is defined multiple times", key);
if (NULL == zbx_json_decodevalue_dyn(pnext, &value, &string_alloc, NULL))
zabbix_log(LOG_LEVEL_DEBUG, "invalid tag value starting with %s", pnext);
kv_local.key = zbx_strdup(NULL, key);
zbx_hashset_insert(kvs, &kv_local, sizeof(zbx_kv_t));
int zbx_kvs_from_json_by_path_get(const char *path, const struct zbx_json_parse *jp_kvs_paths, zbx_kvs_t *kvs,