Skip to content

Commit a2baa28

Browse files
committed
cfl_record_accessor: fix container translation and root-key compare
Signed-off-by: Eduardo Silva <eduardo@calyptia.com>
1 parent ad2b78f commit a2baa28

1 file changed

Lines changed: 19 additions & 9 deletions

File tree

src/flb_cfl_record_accessor.c

Lines changed: 19 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -575,13 +575,16 @@ static int cfl_to_json(struct cfl_variant *var, flb_sds_t buf)
575575
loop = cfl_array_size(array);
576576

577577
flb_sds_cat_safe(&buf, "[", 1);
578-
if (loop != 0) {
579-
for (i = 0; i < loop - 1; i++) {
580-
cfl_to_json(array->entries[i], buf);
578+
for (i = 0; i < loop; i++) {
579+
ret = cfl_to_json(array->entries[i], buf);
580+
if (ret == -1) {
581+
return -1;
582+
}
583+
584+
if (i + 1 < loop) {
581585
flb_sds_cat_safe(&buf, ",", 1);
582586
}
583587
}
584-
cfl_to_json(array->entries[loop-1], buf);
585588
flb_sds_cat_safe(&buf, "]", 1);
586589
break;
587590
}
@@ -604,9 +607,13 @@ static int cfl_to_json(struct cfl_variant *var, flb_sds_t buf)
604607
if (ret == -1) {
605608
return -1;
606609
}
607-
break;
610+
611+
if (head->next != &kvlist->list) {
612+
flb_sds_cat_safe(&buf, ",", 1);
613+
}
608614
}
609615
flb_sds_cat_safe(&buf, "}", 1);
616+
break;
610617
}
611618

612619
return 0;
@@ -617,9 +624,9 @@ static flb_sds_t cfl_ra_translate_keymap(struct flb_ra_parser *rp, flb_sds_t buf
617624
{
618625
int ret;
619626
int len;
620-
char *js;
621627
char str[32];
622628
flb_sds_t tmp = NULL;
629+
flb_sds_t js = NULL;
623630
struct flb_cfl_ra_value *crv;
624631

625632
/* Lookup key or subkey value */
@@ -644,10 +651,13 @@ static flb_sds_t cfl_ra_translate_keymap(struct flb_ra_parser *rp, flb_sds_t buf
644651
js = flb_sds_create_size(1024);
645652
/* Convert cfl_variant to JSON string */
646653
ret = cfl_to_json(&crv->v, js);
647-
if (ret == -1) {
654+
if (ret == 0) {
648655
len = strlen(js);
649656
tmp = flb_sds_cat(buf, js, len);
650-
flb_free(js);
657+
flb_sds_destroy(js);
658+
}
659+
else {
660+
flb_sds_destroy(js);
651661
}
652662
}
653663
else if (crv->v.type == CFL_VARIANT_BOOL) {
@@ -808,7 +818,7 @@ int flb_cfl_ra_strcmp(struct flb_cfl_record_accessor *ra, struct cfl_variant var
808818

809819
rp = mk_list_entry_first(&ra->list, struct flb_ra_parser, _head);
810820
return flb_cfl_ra_key_strcmp(rp->key->name, var, rp->key->subkeys,
811-
rp->key->name, flb_sds_len(rp->key->name));
821+
str, len);
812822
}
813823

814824
/*

0 commit comments

Comments
 (0)