It will be helpful to get the desired string of interface name/mac in a
consistent way.
Signed-off-by: Lin Ma <lma(a)suse.com>
---
tools/virsh-completer-interface.c | 25 ++++++++++++++++---------
tools/virsh-completer-interface.h | 3 +++
2 files changed, 19 insertions(+), 9 deletions(-)
diff --git a/tools/virsh-completer-interface.c b/tools/virsh-completer-interface.c
index 8028db8746..407021485f 100644
--- a/tools/virsh-completer-interface.c
+++ b/tools/virsh-completer-interface.c
@@ -25,16 +25,16 @@
#include "virsh.h"
#include "virstring.h"
-char **
-virshInterfaceNameCompleter(vshControl *ctl,
- const vshCmd *cmd G_GNUC_UNUSED,
- unsigned int flags)
+static char **
+virshInterfaceStringHelper(vshControl *ctl,
+ const vshCmd *cmd G_GNUC_UNUSED,
+ unsigned int flags,
+ virInterfaceStringCallback cb)
{
virshControlPtr priv = ctl->privData;
virInterfacePtr *ifaces = NULL;
int nifaces = 0;
size_t i = 0;
- char **ret = NULL;
VIR_AUTOSTRINGLIST tmp = NULL;
virCheckFlags(VIR_CONNECT_LIST_INTERFACES_ACTIVE |
@@ -50,15 +50,22 @@ virshInterfaceNameCompleter(vshControl *ctl,
tmp = g_new0(char *, nifaces + 1);
for (i = 0; i < nifaces; i++) {
- const char *name = virInterfaceGetName(ifaces[i]);
+ const char *name = (cb)(ifaces[i]);
tmp[i] = g_strdup(name);
}
- ret = g_steal_pointer(&tmp);
-
for (i = 0; i < nifaces; i++)
virInterfaceFree(ifaces[i]);
g_free(ifaces);
- return ret;
+
+ return g_steal_pointer(&tmp);
+}
+
+char **
+virshInterfaceNameCompleter(vshControl *ctl,
+ const vshCmd *cmd,
+ unsigned int flags)
+{
+ return virshInterfaceStringHelper(ctl, cmd, flags, virInterfaceGetName);
}
diff --git a/tools/virsh-completer-interface.h b/tools/virsh-completer-interface.h
index 893dee5a6b..32da01e766 100644
--- a/tools/virsh-completer-interface.h
+++ b/tools/virsh-completer-interface.h
@@ -22,6 +22,9 @@
#include "vsh.h"
+typedef const char *
+(*virInterfaceStringCallback)(virInterfacePtr iface);
+
char ** virshInterfaceNameCompleter(vshControl *ctl,
const vshCmd *cmd,
unsigned int flags);
--
2.26.0