diff --git a/lightningd/json.c b/lightningd/json.c index 5171f75d3..f11069e53 100644 --- a/lightningd/json.c +++ b/lightningd/json.c @@ -330,16 +330,6 @@ void json_add_null(struct json_stream *stream, const char *fieldname) json_add_member(stream, fieldname, "null"); } -void json_add_hex(struct json_stream *result, const char *fieldname, - const void *data, size_t len) -{ - char *hex = tal_arr(NULL, char, hex_str_size(len)); - - hex_encode(data, len, hex, hex_str_size(len)); - json_add_string(result, fieldname, hex); - tal_free(hex); -} - void json_add_hex_talarr(struct json_stream *result, const char *fieldname, const tal_t *data) diff --git a/lightningd/json_stream.c b/lightningd/json_stream.c index 80695244b..6c65173f2 100644 --- a/lightningd/json_stream.c +++ b/lightningd/json_stream.c @@ -1,6 +1,7 @@ #include /* To reach into io_plan: not a public header! */ #include +#include #include #include #include @@ -271,6 +272,23 @@ json_add_member(struct json_stream *js, const char *fieldname, va_end(ap); } +void json_add_hex(struct json_stream *js, const char *fieldname, + const void *data, size_t len) +{ + /* Size without NUL term */ + size_t hexlen = hex_str_size(len) - 1; + char *dest; + + json_start_member(js, fieldname); + mkroom(js, 1 + hexlen + 1); + dest = membuf_add(&js->outbuf, 1 + hexlen + 1); + dest[0] = '"'; + if (!hex_encode(data, len, dest + 1, hexlen + 1)) + abort(); + dest[1+hexlen] = '"'; + js_written_some(js); +} + /* This is where we read the json_stream and write it to conn */ static struct io_plan *json_stream_output_write(struct io_conn *conn, struct json_stream *js)