diff options
author | Max Kellermann <max@duempel.org> | 2008-09-07 13:25:54 +0200 |
---|---|---|
committer | Max Kellermann <max@duempel.org> | 2008-09-07 13:25:54 +0200 |
commit | f73319c0489e08e1277b80107729ac1f2ea8e7fd (patch) | |
tree | 1642a21e382fa152092d6019191787a15e14a122 | |
parent | 33aec0d6732a529342e59933b351f4e591d8f8f4 (diff) | |
download | mpd-f73319c0489e08e1277b80107729ac1f2ea8e7fd.tar.gz mpd-f73319c0489e08e1277b80107729ac1f2ea8e7fd.tar.xz mpd-f73319c0489e08e1277b80107729ac1f2ea8e7fd.zip |
client: added client_printf()
Based on client_puts(), client_printf() is the successor of
fdprintf(). As soon as all fdprintf() callers have been rewritten to
use client_printf(), we can remove fdprintf().
-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 |