Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions include/fluent-bit/flb_kv.h
Original file line number Diff line number Diff line change
Expand Up @@ -41,5 +41,6 @@ struct flb_kv *flb_kv_item_set(struct mk_list *list,
void flb_kv_item_destroy(struct flb_kv *kv);
void flb_kv_release(struct mk_list *list);
const char *flb_kv_get_key_value(const char *key, struct mk_list *list);
struct flb_kv **flb_kv_get_all_key_values(struct mk_list *list);

#endif
32 changes: 32 additions & 0 deletions src/flb_kv.c
Original file line number Diff line number Diff line change
Expand Up @@ -160,3 +160,35 @@ const char *flb_kv_get_key_value(const char *key, struct mk_list *list)

return NULL;
}

struct flb_kv **flb_kv_get_all_key_values(struct mk_list *list)
{
int count;
int i = 0;
struct mk_list *head;
struct flb_kv *kv;
struct flb_kv **arr;

if (!list) {
return NULL;
}

count = mk_list_size(list);
if (count == 0) {
return NULL;
}

arr = flb_calloc(count, sizeof(struct flb_kv *));
if (!arr) {
flb_errno();
return NULL;
}

mk_list_foreach(head, list) {
kv = mk_list_entry(head, struct flb_kv, _head);
arr[i] = kv;
i++;
}

return arr;
}
37 changes: 37 additions & 0 deletions tests/internal/kv.c
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
/* -*- Mode: C; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */

#include <fluent-bit/flb_kv.h>
#include <fluent-bit/flb_mem.h>
#include "flb_tests_internal.h"

static void test_kv_item_set_duplicate()
Expand Down Expand Up @@ -28,7 +29,43 @@ static void test_kv_item_set_duplicate()
flb_kv_release(&list);
}

static void test_kv_get_all_key_values()
{
struct mk_list list;
struct flb_kv **pairs;

flb_kv_init(&list);

pairs = flb_kv_get_all_key_values(&list);
TEST_CHECK(pairs == NULL);

flb_kv_item_set(&list, "host", "localhost");
flb_kv_item_set(&list, "port", "8080");
flb_kv_item_set(&list, "path", "/api");

pairs = flb_kv_get_all_key_values(&list);
Comment thread
iypetrov marked this conversation as resolved.
TEST_CHECK(pairs != NULL);

if (pairs) {
TEST_CHECK(pairs[0] != NULL);
TEST_CHECK(strcmp(pairs[0]->key, "host") == 0);
TEST_CHECK(strcmp(pairs[0]->val, "localhost") == 0);

TEST_CHECK(pairs[1] != NULL);
TEST_CHECK(strcmp(pairs[1]->key, "port") == 0);
TEST_CHECK(strcmp(pairs[1]->val, "8080") == 0);

TEST_CHECK(pairs[2] != NULL);
TEST_CHECK(strcmp(pairs[2]->key, "path") == 0);
TEST_CHECK(strcmp(pairs[2]->val, "/api") == 0);
}

flb_kv_release(&list);
flb_free(pairs);
}

TEST_LIST = {
{"kv_item_set_duplicate", test_kv_item_set_duplicate},
{"kv_get_all_key_values", test_kv_get_all_key_values},
{0}
};
Loading