2022-06-09 08:13:46 +03:00
|
|
|
|
|
|
|
#include <stdio.h>
|
|
|
|
#include <linux/printbuf.h>
|
|
|
|
|
2022-09-26 05:28:34 +03:00
|
|
|
void prt_vprintf(struct printbuf *out, const char *fmt, va_list args)
|
2022-06-09 08:13:46 +03:00
|
|
|
{
|
|
|
|
int len;
|
|
|
|
|
|
|
|
do {
|
2022-09-26 05:28:34 +03:00
|
|
|
va_list args2;
|
|
|
|
|
|
|
|
va_copy(args2, args);
|
|
|
|
len = vsnprintf(out->buf + out->pos, printbuf_remaining(out), fmt, args2);
|
2022-06-09 08:13:46 +03:00
|
|
|
} while (len + 1 >= printbuf_remaining(out) &&
|
|
|
|
!printbuf_make_room(out, len + 1));
|
|
|
|
|
|
|
|
len = min_t(size_t, len,
|
|
|
|
printbuf_remaining(out) ? printbuf_remaining(out) - 1 : 0);
|
|
|
|
out->pos += len;
|
|
|
|
}
|
2022-09-26 05:28:34 +03:00
|
|
|
|
|
|
|
void prt_printf(struct printbuf *out, const char *fmt, ...)
|
|
|
|
{
|
|
|
|
va_list args;
|
|
|
|
|
|
|
|
va_start(args, fmt);
|
|
|
|
prt_vprintf(out, fmt, args);
|
|
|
|
va_end(args);
|
|
|
|
}
|