]> git.puffer.fish Git - matthieu/frr.git/commitdiff
lib: save errno in vty_out()
authorDavid Lamparter <equinox@diac24.net>
Fri, 26 Mar 2021 13:27:51 +0000 (14:27 +0100)
committerDavid Lamparter <equinox@diac24.net>
Tue, 30 Mar 2021 20:34:56 +0000 (22:34 +0200)
... so `%m` works correctly, without us trampling over `errno` before we
get to formatting it.

Signed-off-by: David Lamparter <equinox@diac24.net>
lib/vty.c

index d44cc904c5765114cddd94d89008c7c936b620ac..96cfef1c0af46bb583e135ca206c8e346ad7672b 100644 (file)
--- a/lib/vty.c
+++ b/lib/vty.c
@@ -159,6 +159,8 @@ int vty_out(struct vty *vty, const char *format, ...)
        char buf[1024];
        char *p = NULL;
        char *filtered;
+       /* format string may contain %m, keep errno intact for printfrr */
+       int saved_errno = errno;
 
        if (vty->frame_pos) {
                vty->frame_pos = 0;
@@ -166,6 +168,7 @@ int vty_out(struct vty *vty, const char *format, ...)
        }
 
        va_start(args, format);
+       errno = saved_errno;
        p = vasnprintfrr(MTYPE_VTY_OUT_BUF, buf, sizeof(buf), format, args);
        va_end(args);