aboutsummaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-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