From f49d0e43a7c991c0764f9ae7a6743f38f5352de1 Mon Sep 17 00:00:00 2001 From: Jan-Piet Mens Date: Sat, 29 Aug 2015 22:45:03 +0200 Subject: [PATCH] centralize node to object copy --- storage.c | 9 +-------- util.c | 18 ++++++++++++++++++ util.h | 3 ++- 3 files changed, 21 insertions(+), 9 deletions(-) diff --git a/storage.c b/storage.c index d04dde5..50d36db 100644 --- a/storage.c +++ b/storage.c @@ -550,14 +550,7 @@ static int candidate_line(char *line, void *param) char *key = f->string_; if ((node = json_find_member(o, key)) != NULL) { - if (node->tag == JSON_STRING) - json_append_member(newo, key, json_mkstring(node->string_)); - else if (node->tag == JSON_NUMBER) - json_append_member(newo, key, json_mknumber(node->number_)); - else if (node->tag == JSON_BOOL) - json_append_member(newo, key, json_mkbool(node->bool_)); - else if (node->tag == JSON_NULL) - json_append_member(newo, key, json_mknull()); + json_copy_element_to_object(newo, key, node); } } json_delete(o); diff --git a/util.c b/util.c index 6c122e4..a7c6387 100644 --- a/util.c +++ b/util.c @@ -48,6 +48,24 @@ char *slurp_file(char *filename, int fold_newlines) return (buf); } +/* Copy the node into obj */ +int json_copy_element_to_object(JsonNode *obj, char *key, JsonNode *node) +{ + if (obj->tag != JSON_OBJECT) + return (FALSE); + + if (node->tag == JSON_STRING) + json_append_member(obj, key, json_mkstring(node->string_)); + else if (node->tag == JSON_NUMBER) + json_append_member(obj, key, json_mknumber(node->number_)); + else if (node->tag == JSON_BOOL) + json_append_member(obj, key, json_mkbool(node->bool_)); + else if (node->tag == JSON_NULL) + json_append_member(obj, key, json_mknull()); + + return (TRUE); +} + int json_copy_to_object(JsonNode * obj, JsonNode * object_or_array, int clobber) { JsonNode *node; diff --git a/util.h b/util.h index 41c7d53..5bb3428 100644 --- a/util.h +++ b/util.h @@ -11,7 +11,8 @@ const char *isotime(time_t t); char *slurp_file(char *filename, int fold_newlines); -int json_copy_to_object(JsonNode * obj, JsonNode * object_or_array, int clobber); +int json_copy_to_object(JsonNode *obj, JsonNode * object_or_array, int clobber); +int json_copy_element_to_object(JsonNode *obj, char *key, JsonNode *node); int json_copy_from_file(JsonNode * obj, char *filename); int splitter(char *s, char *sep, char **parts); JsonNode *json_splitter(char *s, char *sep);