vty api: add vty_out_va()

Provide a va_list type vty_out() variant, to be able to pass on variable
arguments from other function signatures to vty_out().

This will be used by Ibd6b1ed7f1bd6e1f2e0fde53352055a4468f23e5 for osmo_tdef.

Change-Id: Ie6e6f11a6b794f3cb686350c1ed678e4d5bbbb75
This commit is contained in:
Neels Hofmeyr 2019-02-01 05:38:44 +01:00 committed by Neels Hofmeyr
parent 8d04f95d96
commit c1aa178c8b
2 changed files with 20 additions and 12 deletions

View File

@ -193,6 +193,7 @@ void vty_reset (void);
struct vty *vty_new (void); struct vty *vty_new (void);
struct vty *vty_create (int vty_sock, void *priv); struct vty *vty_create (int vty_sock, void *priv);
int vty_out (struct vty *, const char *, ...) VTY_PRINTF_ATTRIBUTE(2, 3); int vty_out (struct vty *, const char *, ...) VTY_PRINTF_ATTRIBUTE(2, 3);
int vty_out_va(struct vty *vty, const char *format, va_list ap);
int vty_out_newline(struct vty *); int vty_out_newline(struct vty *);
int vty_read(struct vty *vty); int vty_read(struct vty *vty);
//void vty_time_print (struct vty *, int); //void vty_time_print (struct vty *, int);

View File

@ -249,26 +249,19 @@ int vty_shell(struct vty *vty)
return vty->type == VTY_SHELL ? 1 : 0; return vty->type == VTY_SHELL ? 1 : 0;
} }
int vty_out_va(struct vty *vty, const char *format, va_list ap)
/*! VTY standard output function
* \param[in] vty VTY to which we should print
* \param[in] format variable-length format string
*/
int vty_out(struct vty *vty, const char *format, ...)
{ {
va_list args;
int len = 0; int len = 0;
int size = 1024; int size = 1024;
char buf[1024]; char buf[1024];
char *p = NULL; char *p = NULL;
if (vty_shell(vty)) { if (vty_shell(vty)) {
va_start(args, format); vprintf(format, ap);
vprintf(format, args);
va_end(args);
} else { } else {
va_list args;
/* Try to write to initial buffer. */ /* Try to write to initial buffer. */
va_start(args, format); va_copy(args, ap);
len = vsnprintf(buf, sizeof buf, format, args); len = vsnprintf(buf, sizeof buf, format, args);
va_end(args); va_end(args);
@ -284,7 +277,7 @@ int vty_out(struct vty *vty, const char *format, ...)
if (!p) if (!p)
return -1; return -1;
va_start(args, format); va_copy(args, ap);
len = vsnprintf(p, size, format, args); len = vsnprintf(p, size, format, args);
va_end(args); va_end(args);
@ -310,6 +303,20 @@ int vty_out(struct vty *vty, const char *format, ...)
return len; return len;
} }
/*! VTY standard output function
* \param[in] vty VTY to which we should print
* \param[in] format variable-length format string
*/
int vty_out(struct vty *vty, const char *format, ...)
{
va_list args;
int rc;
va_start(args, format);
rc = vty_out_va(vty, format, args);
va_end(args);
return rc;
}
/*! print a newline on the given VTY */ /*! print a newline on the given VTY */
int vty_out_newline(struct vty *vty) int vty_out_newline(struct vty *vty)
{ {