]> git.puffer.fish Git - mirror/frr.git/commitdiff
lib: add vty_outln()
authorQuentin Young <qlyoung@cumulusnetworks.com>
Wed, 21 Jun 2017 02:47:44 +0000 (02:47 +0000)
committerQuentin Young <qlyoung@cumulusnetworks.com>
Thu, 29 Jun 2017 16:28:21 +0000 (16:28 +0000)
Like *.println() in some other unspeakable languages

Signed-off-by: Quentin Young <qlyoung@cumulusnetworks.com>
lib/vty.c
lib/vty.h

index 54a5f727e1110b97c535426262f5c734cf71079e..c6a22503b9dc54a52e8658c3dc6a8f84f03778cf 100644 (file)
--- a/lib/vty.c
+++ b/lib/vty.c
@@ -92,28 +92,23 @@ char integrate_default[] = SYSCONFDIR INTEGRATE_DEFAULT_CONFIG;
 
 static int do_log_commands = 0;
 
-/* VTY standard output function. */
-int
-vty_out (struct vty *vty, const char *format, ...)
+static int
+vty_out_variadic (struct vty *vty, const char *format, va_list args)
 {
-  va_list args;
   int len = 0;
   int size = 1024;
   char buf[1024];
   char *p = NULL;
+  va_list cp;
 
   if (vty_shell (vty))
-    {
-      va_start (args, format);
-      vprintf (format, args);
-      va_end (args);
-    }
+    vprintf (format, args);
   else
     {
       /* Try to write to initial buffer.  */
-      va_start (args, format);
+      va_copy (cp, args);
       len = vsnprintf (buf, sizeof(buf), format, args);
-      va_end (args);
+      va_end (cp);
 
       /* Initial buffer is not enough.  */
       if (len < 0 || len >= size)
@@ -129,9 +124,7 @@ vty_out (struct vty *vty, const char *format, ...)
               if (! p)
                 return -1;
 
-              va_start (args, format);
               len = vsnprintf (p, size, format, args);
-              va_end (args);
 
               if (len > -1 && len < size)
                 break;
@@ -152,6 +145,32 @@ vty_out (struct vty *vty, const char *format, ...)
 
   return len;
 }
+/* VTY standard output function. */
+int
+vty_out (struct vty *vty, const char *format, ...)
+{
+  int len;
+  va_list args;
+
+  va_start (args, format);
+  len = vty_out_variadic (vty, format, args);
+  va_end (args);
+
+  return len;
+}
+
+int
+vty_outln (struct vty *vty, const char *format, ...)
+{
+  int len;
+  va_list args;
+
+  va_start (args, format);
+  len = vty_out_variadic (vty, format, args);
+  va_end (args);
+
+  return len + vty_out (vty, "%s", VTY_NEWLINE);
+}
 
 static int
 vty_log_out (struct vty *vty, const char *level, const char *proto_str,
index e658eb236cd24ef3b2ce5b44aa9232ff3b9f313d..ee2aeac6754e11a2545cfd4cfd2493c02e80970f 100644 (file)
--- a/lib/vty.h
+++ b/lib/vty.h
@@ -215,6 +215,7 @@ extern void vty_reset (void);
 extern struct vty *vty_new (void);
 extern struct vty *vty_stdio (void (*atclose)(void));
 extern int vty_out (struct vty *, const char *, ...) PRINTF_ATTRIBUTE(2, 3);
+extern int vty_outln (struct vty *, const char *, ...) PRINTF_ATTRIBUTE(2, 3);
 extern void vty_read_config (const char *, char *);
 extern void vty_time_print (struct vty *, int);
 extern void vty_serv_sock (const char *, unsigned short, const char *);