From 3f01aaac49ee5701af3c053aabdfb7f592401055 Mon Sep 17 00:00:00 2001 From: Dario Lombardo Date: Mon, 10 Dec 2018 13:42:17 +0100 Subject: [PATCH] json_dumper: add support to convert dots in underscores. This is needed for ek json compatibility. Change-Id: I75c74a1dc7996f3f4c17071508655ae6e3c6b94c Reviewed-on: https://code.wireshark.org/review/30993 Petri-Dish: Dario Lombardo Tested-by: Petri Dish Buildbot Reviewed-by: Peter Wu --- wsutil/json_dumper.c | 11 +++++++---- wsutil/json_dumper.h | 1 + 2 files changed, 8 insertions(+), 4 deletions(-) diff --git a/wsutil/json_dumper.c b/wsutil/json_dumper.c index 7ae9a0674a..6a0568ce7e 100644 --- a/wsutil/json_dumper.c +++ b/wsutil/json_dumper.c @@ -37,7 +37,7 @@ enum json_dumper_change { }; static void -json_puts_string(FILE *fp, const char *str) +json_puts_string(FILE *fp, const char *str, gboolean dot_to_underscore) { if (!str) { fputs("null", fp); @@ -58,7 +58,10 @@ json_puts_string(FILE *fp, const char *str) if (str[i] == '\\' || str[i] == '"') { fputc('\\', fp); } - fputc(str[i], fp); + if (dot_to_underscore && str[i] == '.') + fputc('_', fp); + else + fputc(str[i], fp); } } fputc('"', fp); @@ -200,7 +203,7 @@ json_dumper_set_member_name(json_dumper *dumper, const char *name) } prepare_token(dumper); - json_puts_string(dumper->output_file, name); + json_puts_string(dumper->output_file, name, dumper->flags & JSON_DUMPER_DOT_TO_UNDERSCORE); fputc(':', dumper->output_file); if ((dumper->flags & JSON_DUMPER_FLAGS_PRETTY_PRINT)) { fputc(' ', dumper->output_file); @@ -256,7 +259,7 @@ json_dumper_value_string(json_dumper *dumper, const char *value) } prepare_token(dumper); - json_puts_string(dumper->output_file, value); + json_puts_string(dumper->output_file, value, FALSE); dumper->state[dumper->current_depth] = JSON_DUMPER_TYPE_VALUE; } diff --git a/wsutil/json_dumper.h b/wsutil/json_dumper.h index 98ce99a3e7..68e1777d46 100644 --- a/wsutil/json_dumper.h +++ b/wsutil/json_dumper.h @@ -49,6 +49,7 @@ extern "C" { typedef struct json_dumper { FILE *output_file; /**< Output file, must be set. */ #define JSON_DUMPER_FLAGS_PRETTY_PRINT (1 << 0) /* Enable pretty printing. */ +#define JSON_DUMPER_DOT_TO_UNDERSCORE (1 << 1) /* Convert dots to underscores in keys */ int flags; /* for internal use, initialize with zeroes. */ int current_depth;