aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMax Kellermann <max@duempel.org>2008-09-07 13:25:54 +0200
committerMax Kellermann <max@duempel.org>2008-09-07 13:25:54 +0200
commitf73319c0489e08e1277b80107729ac1f2ea8e7fd (patch)
tree1642a21e382fa152092d6019191787a15e14a122
parent33aec0d6732a529342e59933b351f4e591d8f8f4 (diff)
downloadmpd-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.c29
-rw-r--r--src/client.h11
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