aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorNeels Hofmeyr <neels@hofmeyr.de>2019-02-01 05:38:44 +0100
committerNeels Hofmeyr <nhofmeyr@sysmocom.de>2019-02-04 16:43:57 +0000
commitc1aa178c8bc71129d13b7b47cfce4449bcec0c2c (patch)
tree2fde734ccc5d79e9b68f73f6ca1c3d8d068beac3
parent8d04f95d96f869543a99b18fd3326ea84e9f5366 (diff)
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
-rw-r--r--include/osmocom/vty/vty.h1
-rw-r--r--src/vty/vty.c31
2 files changed, 20 insertions, 12 deletions
diff --git a/include/osmocom/vty/vty.h b/include/osmocom/vty/vty.h
index c4cf707..8d2e1b3 100644
--- a/include/osmocom/vty/vty.h
+++ b/include/osmocom/vty/vty.h
@@ -193,6 +193,7 @@ void vty_reset (void);
struct vty *vty_new (void);
struct vty *vty_create (int vty_sock, void *priv);
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_read(struct vty *vty);
//void vty_time_print (struct vty *, int);
diff --git a/src/vty/vty.c b/src/vty/vty.c
index 8c89197..98b332d 100644
--- a/src/vty/vty.c
+++ b/src/vty/vty.c
@@ -249,26 +249,19 @@ int vty_shell(struct vty *vty)
return vty->type == VTY_SHELL ? 1 : 0;
}
-
-/*! 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, ...)
+int vty_out_va(struct vty *vty, const char *format, va_list ap)
{
- va_list args;
int len = 0;
int size = 1024;
char buf[1024];
char *p = NULL;
if (vty_shell(vty)) {
- va_start(args, format);
- vprintf(format, args);
- va_end(args);
+ vprintf(format, ap);
} else {
+ va_list args;
/* Try to write to initial buffer. */
- va_start(args, format);
+ va_copy(args, ap);
len = vsnprintf(buf, sizeof buf, format, args);
va_end(args);
@@ -284,7 +277,7 @@ int vty_out(struct vty *vty, const char *format, ...)
if (!p)
return -1;
- va_start(args, format);
+ va_copy(args, ap);
len = vsnprintf(p, size, format, args);
va_end(args);
@@ -310,6 +303,20 @@ int vty_out(struct vty *vty, const char *format, ...)
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 */
int vty_out_newline(struct vty *vty)
{