From: David Lamparter Date: Tue, 2 Mar 2021 20:39:49 +0000 (+0100) Subject: lib: add `%pFB` extension to print struct fbuf * X-Git-Tag: base_8.0~195^2~6 X-Git-Url: https://git.puffer.fish/?a=commitdiff_plain;h=bb12115e0be449df92af6294fc8410eb7745be26;p=mirror%2Ffrr.git lib: add `%pFB` extension to print struct fbuf * Useful to insert output from another bprintfrr() call. Signed-off-by: David Lamparter --- diff --git a/lib/printf/glue.c b/lib/printf/glue.c index 2c97dd639e..1147901236 100644 --- a/lib/printf/glue.c +++ b/lib/printf/glue.c @@ -256,6 +256,28 @@ ssize_t printfrr_exti(struct fbuf *buf, struct printfrr_eargs *ea, return -1; } +printfrr_ext_autoreg_p("FB", printfrr_fb) +static ssize_t printfrr_fb(struct fbuf *out, struct printfrr_eargs *ea, + const void *ptr) +{ + const struct fbuf *in = ptr; + ptrdiff_t copy_len; + + if (!in) + return bputs(out, "NULL"); + + if (out) { + copy_len = MIN(in->pos - in->buf, + out->buf + out->len - out->pos); + if (copy_len > 0) { + memcpy(out->pos, in->buf, copy_len); + out->pos += copy_len; + } + } + + return in->pos - in->buf; +} + printfrr_ext_autoreg_p("VA", printfrr_va) static ssize_t printfrr_va(struct fbuf *buf, struct printfrr_eargs *ea, const void *ptr) diff --git a/lib/printfrr.h b/lib/printfrr.h index 6ca4d963c4..8ea8fd69a7 100644 --- a/lib/printfrr.h +++ b/lib/printfrr.h @@ -259,6 +259,7 @@ struct va_format { }; #ifdef _FRR_ATTRIBUTE_PRINTFRR +#pragma FRR printfrr_ext "%pFB" (struct fbuf *) #pragma FRR printfrr_ext "%pVA" (struct va_format *) #endif