summary refs log tree commit diff
diff options
context:
space:
mode:
-rw-r--r--bounce.h13
1 files changed, 13 insertions, 0 deletions
diff --git a/bounce.h b/bounce.h
index a2265c8..2010d45 100644
--- a/bounce.h
+++ b/bounce.h
@@ -26,6 +26,7 @@
  */
 
 #include <limits.h>
+#include <stdarg.h>
 #include <stdbool.h>
 #include <stdio.h>
 #include <stdlib.h>
@@ -49,6 +50,18 @@
 
 typedef unsigned char byte;
 
+static inline char *seprintf(char *ptr, char *end, const char *fmt, ...)
+	__attribute__((format(printf, 3, 4)));
+static inline char *seprintf(char *ptr, char *end, const char *fmt, ...) {
+	va_list ap;
+	va_start(ap, fmt);
+	int n = vsnprintf(ptr, end - ptr, fmt, ap);
+	va_end(ap);
+	if (n < 0) return NULL;
+	if (n > end - ptr) return end;
+	return ptr + n;
+}
+
 enum { MessageCap = 8191 + 512 };
 
 enum { ParamCap = 15 };