From 4893ea70f5f69728acab16e0e625f898c6028518 Mon Sep 17 00:00:00 2001 From: =?utf8?q?Marek=20Vavru=C5=A1a?= Date: Sun, 24 May 2015 23:04:38 +0200 Subject: [PATCH] stats: use json objects for output --- modules/stats/stats.c | 18 +++++++----------- modules/stats/stats.mk | 2 +- 2 files changed, 8 insertions(+), 12 deletions(-) diff --git a/modules/stats/stats.c b/modules/stats/stats.c index f162ea1ff..49b87d595 100644 --- a/modules/stats/stats.c +++ b/modules/stats/stats.c @@ -23,6 +23,7 @@ */ #include +#include #include "lib/layer/iterate.h" #include "lib/rplan.h" @@ -148,13 +149,9 @@ static char* stats_get(void *env, struct kr_module *module, const char *args) static int list_entry(const char *key, void *val, void *baton) { - char **strval = (char **)baton; + JsonNode *root = baton; size_t number = (size_t) val; - char buf[512]; - snprintf(buf, sizeof(buf), "'%s': %zu,\n", key, number); - char *ret = kr_strcatdup(2, *strval, buf); - free(*strval); - *strval = ret; + json_append_member(root, key, json_mknumber(number)); return 0; } @@ -166,11 +163,10 @@ static int list_entry(const char *key, void *val, void *baton) static char* stats_list(void *env, struct kr_module *module, const char *args) { map_t *map = module->data; - char *strval = NULL; - /* @todo This is very inefficient with memory */ - map_walk_prefixed(map, args ? args : "", list_entry, &strval); - char *ret = kr_strcatdup(3, "{\n", strval, "}"); - free(strval); + JsonNode *root = json_mkobject(); + map_walk_prefixed(map, args ? args : "", list_entry, root); + char *ret = json_encode(root); + json_delete(root); return ret; } diff --git a/modules/stats/stats.mk b/modules/stats/stats.mk index fe15669ef..362c619a1 100644 --- a/modules/stats/stats.mk +++ b/modules/stats/stats.mk @@ -1,4 +1,4 @@ -stats_SOURCES := modules/stats/stats.c +stats_SOURCES := modules/stats/stats.c contrib/ccan/json/json.c stats_DEPEND := $(libkresolve) stats_LIBS := $(libkresolve_TARGET) $(libkresolve_LIBS) $(call make_c_module,stats) -- 2.47.2