diff --git a/daemon/cli.c b/daemon/cli.c index 958149128..35afe336c 100644 --- a/daemon/cli.c +++ b/daemon/cli.c @@ -1265,11 +1265,12 @@ static void cli_incoming(struct streambuf_stream *s) { ilogs(control, LOG_INFO, "New cli connection from %s", s->addr); } -static void cli_streambuf_printf(struct cli_writer *cw, const char *fmt, ...) { +static size_t cli_streambuf_printf(struct cli_writer *cw, const char *fmt, ...) { va_list va; va_start(va, fmt); - streambuf_vprintf(cw->ptr, fmt, va); + size_t ret = streambuf_vprintf(cw->ptr, fmt, va); va_end(va); + return ret; } static void cli_stream_readable(struct streambuf_stream *s) { @@ -2059,12 +2060,15 @@ static void cli_incoming_media_evict_players(str *instr, struct cli_writer *cw, } #endif -static void ng_printf(struct cli_writer *cw, const char *fmt, ...) { +static size_t ng_printf(struct cli_writer *cw, const char *fmt, ...) { GString *s = cw->ptr; + size_t ret = s->len; va_list va; va_start(va, fmt); g_string_append_vprintf(s, fmt, va); va_end(va); + ret = s->len - ret; + return ret; } const char *cli_ng(ng_command_ctx_t *ctx) { diff --git a/daemon/websocket.c b/daemon/websocket.c index 5819fa967..f413dd4ba 100644 --- a/daemon/websocket.c +++ b/daemon/websocket.c @@ -424,13 +424,15 @@ static const char *websocket_http_metrics(struct websocket_message *wm) { // adds printf string to output buffer without triggering response -static void websocket_queue_printf(struct cli_writer *cw, const char *fmt, ...) { +static size_t websocket_queue_printf(struct cli_writer *cw, const char *fmt, ...) { va_list va; va_start(va, fmt); char *s = g_strdup_vprintf(fmt, va); + size_t ret = strlen(s); va_end(va); - websocket_queue_raw(cw->ptr, s, strlen(s)); + websocket_queue_raw(cw->ptr, s, ret); g_free(s); + return ret; } diff --git a/include/cli.h b/include/cli.h index 8c0e05f7b..84bc8e22c 100644 --- a/include/cli.h +++ b/include/cli.h @@ -16,7 +16,7 @@ struct cli_writer; struct call_monologue; struct cli_writer { - void (*cw_printf)(struct cli_writer *, const char *, ...) __attribute__ ((format (printf, 2, 3))); + size_t (*cw_printf)(struct cli_writer *, const char *, ...) __attribute__ ((format (printf, 2, 3))); void *ptr; call_t *call; struct call_monologue *ml; diff --git a/lib/streambuf.c b/lib/streambuf.c index e3f36e17a..c30fecdfb 100644 --- a/lib/streambuf.c +++ b/lib/streambuf.c @@ -182,22 +182,27 @@ size_t streambuf_bufsize(struct streambuf *b) { } -void streambuf_vprintf(struct streambuf *b, const char *f, va_list va) { +size_t streambuf_vprintf(struct streambuf *b, const char *f, va_list va) { GString *gs; gs = g_string_new(""); g_string_vprintf(gs, f, va); + size_t ret = gs->len; streambuf_write(b, gs->str, gs->len); g_string_free(gs, TRUE); + + return ret; } -void streambuf_printf(struct streambuf *b, const char *f, ...) { +size_t streambuf_printf(struct streambuf *b, const char *f, ...) { va_list va; va_start(va, f); - streambuf_vprintf(b, f, va); + size_t ret = streambuf_vprintf(b, f, va); va_end(va); + + return ret; } void streambuf_write(struct streambuf *b, const char *s, unsigned int len) { diff --git a/lib/streambuf.h b/lib/streambuf.h index ea4919936..c1f9612d0 100644 --- a/lib/streambuf.h +++ b/lib/streambuf.h @@ -42,8 +42,8 @@ int streambuf_writeable(struct streambuf *); int streambuf_readable(struct streambuf *); char *streambuf_getline(struct streambuf *); size_t streambuf_bufsize(struct streambuf *); -void streambuf_printf(struct streambuf *, const char *, ...) __attribute__ ((format (printf, 2, 3))); -void streambuf_vprintf(struct streambuf *, const char *, va_list); +size_t streambuf_printf(struct streambuf *, const char *, ...) __attribute__ ((format (printf, 2, 3))); +size_t streambuf_vprintf(struct streambuf *, const char *, va_list); void streambuf_write(struct streambuf *, const char *, unsigned int); INLINE void streambuf_write_str(struct streambuf *b, str *s) { streambuf_write(b, s->s, s->len);