Use like this:
void func(const char *msg, va_list args) {
...
bvsnprintf(buf, len, "file %s, line %d: %V (foo %d, bar %d)", file, line, msg, &args, foo, bar);
...
}
*str++ = ' ';
continue;
+ case 'V': {
+ const char *vfmt = va_arg(args, const char *);
+ va_list *vargs = va_arg(args, va_list *);
+ int res = bvsnprintf(str, size, vfmt, *vargs);
+ if (res < 0)
+ return -1;
+ str += res;
+ size -= res;
+ continue;
+ }
+
case 'p':
if (field_width == -1) {
field_width = 2*sizeof(void *);