From e60bc3a1a1d0d976a408b9edf21e7d755af88fe6 Mon Sep 17 00:00:00 2001 From: =?utf8?q?Thomas=20Wei=C3=9Fschuh?= Date: Fri, 8 Dec 2023 18:10:47 +0100 Subject: [PATCH] jsonwrt: add ul_jsonwrt_value_s_sized MIME-Version: 1.0 Content-Type: text/plain; charset=utf8 Content-Transfer-Encoding: 8bit Signed-off-by: Thomas Weißschuh --- include/jsonwrt.h | 2 ++ lib/jsonwrt.c | 21 ++++++++++++++++----- 2 files changed, 18 insertions(+), 5 deletions(-) diff --git a/include/jsonwrt.h b/include/jsonwrt.h index 8527516f75..b450afcf87 100644 --- a/include/jsonwrt.h +++ b/include/jsonwrt.h @@ -41,6 +41,8 @@ void ul_jsonwrt_value_raw(struct ul_jsonwrt *fmt, const char *name, const char *data); void ul_jsonwrt_value_s(struct ul_jsonwrt *fmt, const char *name, const char *data); +void ul_jsonwrt_value_s_sized(struct ul_jsonwrt *fmt, + const char *name, const char *data, size_t size); void ul_jsonwrt_value_u64(struct ul_jsonwrt *fmt, const char *name, uint64_t data); void ul_jsonwrt_value_double(struct ul_jsonwrt *fmt, diff --git a/lib/jsonwrt.c b/lib/jsonwrt.c index 6008a839c0..dc20d2e46e 100644 --- a/lib/jsonwrt.c +++ b/lib/jsonwrt.c @@ -26,12 +26,12 @@ * } * } */ -static void fputs_quoted_case_json(const char *data, FILE *out, int dir) +static void fputs_quoted_case_json(const char *data, FILE *out, int dir, size_t size) { const char *p; fputc('"', out); - for (p = data; p && *p; p++) { + for (p = data; p && *p && (!size || p < data + size); p++) { const unsigned int c = (unsigned int) *p; @@ -98,9 +98,9 @@ static void fputs_quoted_case_json(const char *data, FILE *out, int dir) fputc('"', out); } -#define fputs_quoted_json(_d, _o) fputs_quoted_case_json(_d, _o, 0) -#define fputs_quoted_json_upper(_d, _o) fputs_quoted_case_json(_d, _o, 1) -#define fputs_quoted_json_lower(_d, _o) fputs_quoted_case_json(_d, _o, -1) +#define fputs_quoted_json(_d, _o) fputs_quoted_case_json(_d, _o, 0, 0) +#define fputs_quoted_json_upper(_d, _o) fputs_quoted_case_json(_d, _o, 1, 0) +#define fputs_quoted_json_lower(_d, _o) fputs_quoted_case_json(_d, _o, -1, 0) void ul_jsonwrt_init(struct ul_jsonwrt *fmt, FILE *out, int indent) { @@ -204,6 +204,17 @@ void ul_jsonwrt_value_s(struct ul_jsonwrt *fmt, ul_jsonwrt_value_close(fmt); } +void ul_jsonwrt_value_s_sized(struct ul_jsonwrt *fmt, + const char *name, const char *data, size_t size) +{ + ul_jsonwrt_value_open(fmt, name); + if (data && *data) + fputs_quoted_case_json(data, fmt->out, 0, size); + else + fputs("null", fmt->out); + ul_jsonwrt_value_close(fmt); +} + void ul_jsonwrt_value_u64(struct ul_jsonwrt *fmt, const char *name, uint64_t data) { -- 2.47.2