lib: add vty_outln()

Like *.println() in some other unspeakable languages

Signed-off-by: Quentin Young <qlyoung@cumulusnetworks.com>
This commit is contained in:
Quentin Young 2017-06-21 02:47:44 +00:00
parent 9e3b206d7c
commit 4d5f445750
2 changed files with 33 additions and 13 deletions

View file

@ -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,

View file

@ -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 *);