#include "internal.h" /* * appendf will append the given formatted string to our buffer. * returns the newly minted string */ int str·appendf(string *s, const byte* fmt, ...) { va_list args; va_start(args, fmt); int remain = str·cap(*s) - str·len(*s); int n = vsnprintf(*s + str·len(*s), remain + 1, fmt, args); va_end(args); if(n > remain){ // If the first write was incomplete, we overwite the data again. str·grow(s, n); va_list args; va_start(args, fmt); n = vsnprintf(*s + str·len(*s), n + 1, fmt, args); assert(n - remain <= str·cap(*s)); va_end(args); } Hdr* h = (Hdr*)(*s - sizeof(Hdr)); h->len += n; return n; }