virt-admin.c virt-admin.h \
$(NULL)
+VIRT_ADMIN_COMPLETER = \
+ virt-admin-completer.c virt-admin-completer.h
+
+if WITH_READLINE
+virt_admin_SOURCES += $(VIRT_ADMIN_COMPLETER)
+else ! WITH_READLINE
+EXTRA_DIST += $(VIRT_ADMIN_COMPLETER)
+endif ! WITH_READLINE
+
virt_admin_LDFLAGS = \
$(AM_LDFLAGS) \
$(COVERAGE_LDFLAGS) \
--- /dev/null
+/*
+ * virt-admin-completer.c: virt-admin completer callbacks
+ *
+ * Copyright (C) 2017 Red Hat, Inc.
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library. If not, see
+ * <http://www.gnu.org/licenses/>.
+ *
+ * Michal Privoznik <mprivozn@redhat.com>
+ *
+ */
+
+#include <config.h>
+
+#include "virt-admin-completer.h"
+#include "internal.h"
+#include "virt-admin.h"
+#include "viralloc.h"
+#include "virstring.h"
+
+
+char **
+vshAdmServerCompleter(vshControl *ctl,
+ const vshCmd *cmd ATTRIBUTE_UNUSED,
+ unsigned int flags)
+{
+ vshAdmControlPtr priv = ctl->privData;
+ virAdmServerPtr *srvs = NULL;
+ int nsrvs = 0;
+ size_t i = 0;
+ char **ret = NULL;
+
+ virCheckFlags(0, NULL);
+
+ if (!priv->conn || virAdmConnectIsAlive(priv->conn) <= 0)
+ return NULL;
+
+ /* Obtain a list of available servers on the daemon */
+ if ((nsrvs = virAdmConnectListServers(priv->conn, &srvs, 0)) < 0)
+ return NULL;
+
+ if (VIR_ALLOC_N(ret, nsrvs + 1) < 0)
+ goto error;
+
+ for (i = 0; i < nsrvs; i++) {
+ const char *name = virAdmServerGetName(srvs[i]);
+
+ if (VIR_STRDUP(ret[i], name) < 0)
+ goto error;
+
+ virAdmServerFree(srvs[i]);
+ }
+ VIR_FREE(srvs);
+
+ return ret;
+
+ error:
+ for (; i < nsrvs; i++)
+ virAdmServerFree(srvs[i]);
+ VIR_FREE(srvs);
+ for (i = 0; i < nsrvs; i++)
+ VIR_FREE(ret[i]);
+ VIR_FREE(ret);
+ return ret;
+}
--- /dev/null
+/*
+ * virt-admin-completer.h: virt-admin completer callbacks
+ *
+ * Copyright (C) 2017 Red Hat, Inc.
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library. If not, see
+ * <http://www.gnu.org/licenses/>.
+ *
+ * Michal Privoznik <mprivozn@redhat.com>
+ *
+ */
+
+#ifndef VIRT_ADMIN_COMPLETER
+# define VIRT_ADMIN_COMPLETER
+
+# include "vsh.h"
+
+char **
+vshAdmServerCompleter(vshControl *ctl,
+ const vshCmd *cmd,
+ unsigned int flags);
+#endif
#include "virthread.h"
#include "virgettext.h"
#include "virtime.h"
+#include "virt-admin-completer.h"
/* Gnulib doesn't guarantee SA_SIGINFO support. */
#ifndef SA_SIGINFO
{.name = "server",
.type = VSH_OT_DATA,
.flags = VSH_OFLAG_REQ,
+ .completer = vshAdmServerCompleter,
.help = N_("Server to retrieve threadpool attributes from."),
},
{.name = NULL}
{.name = "server",
.type = VSH_OT_DATA,
.flags = VSH_OFLAG_REQ,
+ .completer = vshAdmServerCompleter,
.help = N_("Server to alter threadpool attributes on."),
},
{.name = "min-workers",
{.name = "server",
.type = VSH_OT_DATA,
.flags = VSH_OFLAG_REQ,
+ .completer = vshAdmServerCompleter,
.help = N_("server which to list connected clients from"),
},
{.name = NULL}
{.name = "server",
.type = VSH_OT_DATA,
.flags = VSH_OFLAG_REQ,
+ .completer = vshAdmServerCompleter,
.help = N_("server to which <client> is connected to"),
},
{.name = "client",
{.name = "server",
.type = VSH_OT_DATA,
.flags = VSH_OFLAG_REQ,
+ .completer = vshAdmServerCompleter,
.help = N_("server which the client is currently connected to"),
},
{.name = "client",
{.name = "server",
.type = VSH_OT_DATA,
.flags = VSH_OFLAG_REQ,
+ .completer = vshAdmServerCompleter,
.help = N_("Server to retrieve the client limits from."),
},
{.name = NULL}
{.name = "server",
.type = VSH_OT_DATA,
.flags = VSH_OFLAG_REQ,
+ .completer = vshAdmServerCompleter,
.help = N_("Server to alter the client-related configuration limits on."),
},
{.name = "max-clients",