From 98e48e7dd0e5d64752bcdbf07e30baae9b22f636 Mon Sep 17 00:00:00 2001 From: Ron Diskin Date: Thu, 23 Jan 2020 12:32:27 +0200 Subject: [PATCH] json_print: Add new json object function not as array item Currently new json object opens (and delete_json_obj closes) the object as an array, what adds prints for the matching bracket '[' ']' at the start/end of the object. This patch adds new_json_obj_plain() and the matching delete_json_obj_plain() to enable opening and closing json object, not as array and leave it to the using function to decide which type of object to open/close as the main object. Signed-off-by: Ron Diskin Reviewed-by: Moshe Shemesh Reviewed-by: Jiri Pirko Signed-off-by: Stephen Hemminger --- include/json_print.h | 2 ++ lib/json_print.c | 30 ++++++++++++++++++++++++++---- 2 files changed, 28 insertions(+), 4 deletions(-) diff --git a/include/json_print.h b/include/json_print.h index fcc28d5e2..34444793a 100644 --- a/include/json_print.h +++ b/include/json_print.h @@ -31,6 +31,8 @@ enum output_type { void new_json_obj(int json); void delete_json_obj(void); +void new_json_obj_plain(int json); +void delete_json_obj_plain(void); bool is_json_context(void); diff --git a/lib/json_print.c b/lib/json_print.c index fb5f0e5d9..8e7f32dca 100644 --- a/lib/json_print.c +++ b/lib/json_print.c @@ -20,7 +20,7 @@ static json_writer_t *_jw; #define _IS_JSON_CONTEXT(type) ((type & PRINT_JSON || type & PRINT_ANY) && _jw) #define _IS_FP_CONTEXT(type) (!_jw && (type & PRINT_FP || type & PRINT_ANY)) -void new_json_obj(int json) +static void __new_json_obj(int json, bool have_array) { if (json) { _jw = jsonw_new(stdout); @@ -30,18 +30,40 @@ void new_json_obj(int json) } if (pretty) jsonw_pretty(_jw, true); - jsonw_start_array(_jw); + if (have_array) + jsonw_start_array(_jw); } } -void delete_json_obj(void) +static void __delete_json_obj(bool have_array) { if (_jw) { - jsonw_end_array(_jw); + if (have_array) + jsonw_end_array(_jw); jsonw_destroy(&_jw); } } +void new_json_obj(int json) +{ + __new_json_obj(json, true); +} + +void delete_json_obj(void) +{ + __delete_json_obj(true); +} + +void new_json_obj_plain(int json) +{ + __new_json_obj(json, false); +} + +void delete_json_obj_plain(void) +{ + __delete_json_obj(false); +} + bool is_json_context(void) { return _jw != NULL; -- 2.47.2