]> git.puffer.fish Git - matthieu/frr.git/commitdiff
lib: add `%pFB` extension to print struct fbuf *
authorDavid Lamparter <equinox@diac24.net>
Tue, 2 Mar 2021 20:39:49 +0000 (21:39 +0100)
committerDavid Lamparter <equinox@diac24.net>
Tue, 30 Mar 2021 20:32:59 +0000 (22:32 +0200)
Useful to insert output from another bprintfrr() call.

Signed-off-by: David Lamparter <equinox@diac24.net>
lib/printf/glue.c
lib/printfrr.h

index 2c97dd639e66390ab0a210a5d4861320afae37ae..114790123688d0f4e1b2420d8f341090b188c3e7 100644 (file)
@@ -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)
index 6ca4d963c4499d813c36ac89ffcd70073bcb04e3..8ea8fd69a7b6606cabe22d252e24d27115a1bebc 100644 (file)
@@ -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