From 14883b07003b9ed4223cd8f2c03b301fddae07bd Mon Sep 17 00:00:00 2001 From: Austin Clements Date: Thu, 2 Aug 2012 21:14:49 -0400 Subject: sprinter: Add a string_len method This method allows callers to output strings with specific lengths. It's useful both for strings with embedded NULs (which JSON can represent, though parser support is apparently spotty), and non-terminated strings. --- sprinter-text.c | 11 +++++++++-- 1 file changed, 9 insertions(+), 2 deletions(-) (limited to 'sprinter-text.c') diff --git a/sprinter-text.c b/sprinter-text.c index b208840b..dfa54b57 100644 --- a/sprinter-text.c +++ b/sprinter-text.c @@ -25,14 +25,20 @@ struct sprinter_text { }; static void -text_string (struct sprinter *sp, const char *val) +text_string_len (struct sprinter *sp, const char *val, size_t len) { struct sprinter_text *sptxt = (struct sprinter_text *) sp; if (sptxt->current_prefix != NULL) fprintf (sptxt->stream, "%s:", sptxt->current_prefix); - fputs(val, sptxt->stream); + fwrite (val, len, 1, sptxt->stream); +} + +static void +text_string (struct sprinter *sp, const char *val) +{ + text_string_len (sp, val, strlen (val)); } static void @@ -105,6 +111,7 @@ sprinter_text_create (const void *ctx, FILE *stream) .begin_list = text_begin_list, .end = text_end, .string = text_string, + .string_len = text_string_len, .integer = text_integer, .boolean = text_boolean, .null = text_null, -- cgit v1.2.3