diff options
-rw-r--r-- | src/client.c | 29 | ||||
-rw-r--r-- | src/client.h | 11 |
2 files changed, 40 insertions, 0 deletions
diff --git a/src/client.c b/src/client.c index e9cda12cb..fd0695cc3 100644 --- a/src/client.c +++ b/src/client.c @@ -797,3 +797,32 @@ void client_puts(struct client *client, const char *s) { client_write(client, s, strlen(s)); } + +void client_vprintf(struct client *client, const char *fmt, va_list args) +{ + va_list tmp; + int length; + char *buffer; + + va_copy(tmp, args); + length = vsnprintf(NULL, 0, fmt, tmp); + va_end(tmp); + + if (length <= 0) + /* wtf.. */ + return; + + buffer = xmalloc(length + 1); + vsnprintf(buffer, length + 1, fmt, args); + client_write(client, buffer, length); + free(buffer); +} + +mpd_fprintf void client_printf(struct client *client, const char *fmt, ...) +{ + va_list args; + + va_start(args, fmt); + client_vprintf(client, fmt, args); + va_end(args); +} diff --git a/src/client.h b/src/client.h index 500e47b8f..f1e96bee5 100644 --- a/src/client.h +++ b/src/client.h @@ -20,6 +20,7 @@ #define INTERFACE_H #include "os_compat.h" +#include "gcc.h" struct client; @@ -49,6 +50,16 @@ void client_write(struct client *client, const char *data, size_t length); */ void client_puts(struct client *client, const char *s); +/** + * Write a printf-like formatted string to the client. + */ +void client_vprintf(struct client *client, const char *fmt, va_list args); + +/** + * Write a printf-like formatted string to the client. + */ +mpd_fprintf void client_printf(struct client *client, const char *fmt, ...); + int client_print(int fd, const char *buffer, size_t len); #endif |