Commit 64c5ad58 authored by Jan Maria Matejka's avatar Jan Maria Matejka
Browse files

Lib: recursive printf

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);
  ...
}
parent 765f400f
Loading
Loading
Loading
Loading
+11 −0
Original line number Diff line number Diff line
@@ -270,6 +270,17 @@ int bvsnprintf(char *buf, int size, const char *fmt, va_list args)
				*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 *);