Split out guts of the function to reuse it to get domain objects from
string.
---
tools/virsh-domain.c | 80 +++++++++++++++++++++++++++++++++-------------------
tools/virsh-domain.h | 4 +++
2 files changed, 55 insertions(+), 29 deletions(-)
diff --git a/tools/virsh-domain.c b/tools/virsh-domain.c
index 2562326..b28de5a 100644
--- a/tools/virsh-domain.c
+++ b/tools/virsh-domain.c
@@ -60,57 +60,79 @@
# define SA_SIGINFO 0
#endif
-virDomainPtr
-vshCommandOptDomainBy(vshControl *ctl, const vshCmd *cmd,
- const char **name, unsigned int flags)
+
+static virDomainPtr
+vshLookupDomainInternal(vshControl *ctl,
+ const char *cmdname,
+ const char *name,
+ unsigned int flags)
{
virDomainPtr dom = NULL;
- const char *n = NULL;
int id;
- const char *optname = "domain";
virCheckFlags(VSH_BYID | VSH_BYUUID | VSH_BYNAME, NULL);
- if (!vshCmdHasOption(ctl, cmd, optname))
- return NULL;
-
- if (vshCommandOptStringReq(ctl, cmd, optname, &n) < 0)
- return NULL;
-
- vshDebug(ctl, VSH_ERR_INFO, "%s: found option <%s>: %s\n",
- cmd->def->name, optname, n);
-
- if (name)
- *name = n;
-
/* try it by ID */
if (flags & VSH_BYID) {
- if (virStrToLong_i(n, NULL, 10, &id) == 0 && id >= 0) {
- vshDebug(ctl, VSH_ERR_DEBUG,
- "%s: <%s> seems like domain ID\n",
- cmd->def->name, optname);
+ if (virStrToLong_i(name, NULL, 10, &id) == 0 && id >= 0) {
+ vshDebug(ctl, VSH_ERR_DEBUG, "%s: <domain> looks like ID\n",
+ cmdname);
dom = virDomainLookupByID(ctl->conn, id);
}
}
+
/* try it by UUID */
if (!dom && (flags & VSH_BYUUID) &&
- strlen(n) == VIR_UUID_STRING_BUFLEN-1) {
- vshDebug(ctl, VSH_ERR_DEBUG, "%s: <%s> trying as domain UUID\n",
- cmd->def->name, optname);
- dom = virDomainLookupByUUIDString(ctl->conn, n);
+ strlen(name) == VIR_UUID_STRING_BUFLEN-1) {
+ vshDebug(ctl, VSH_ERR_DEBUG, "%s: <domain> trying as domain
UUID\n",
+ cmdname);
+ dom = virDomainLookupByUUIDString(ctl->conn, name);
}
+
/* try it by NAME */
if (!dom && (flags & VSH_BYNAME)) {
- vshDebug(ctl, VSH_ERR_DEBUG, "%s: <%s> trying as domain NAME\n",
- cmd->def->name, optname);
- dom = virDomainLookupByName(ctl->conn, n);
+ vshDebug(ctl, VSH_ERR_DEBUG, "%s: <domain> trying as domain
NAME\n",
+ cmdname);
+ dom = virDomainLookupByName(ctl->conn, name);
}
if (!dom)
- vshError(ctl, _("failed to get domain '%s'"), n);
+ vshError(ctl, _("failed to get domain '%s'"), name);
return dom;
}
+
+virDomainPtr
+vshLookupDomainBy(vshControl *ctl,
+ const char *name,
+ unsigned int flags)
+{
+ return vshLookupDomainInternal(ctl, "unknown", name, flags);
+}
+
+
+virDomainPtr
+vshCommandOptDomainBy(vshControl *ctl, const vshCmd *cmd,
+ const char **name, unsigned int flags)
+{
+ const char *n = NULL;
+ const char *optname = "domain";
+
+ if (!vshCmdHasOption(ctl, cmd, optname))
+ return NULL;
+
+ if (vshCommandOptStringReq(ctl, cmd, optname, &n) < 0)
+ return NULL;
+
+ vshDebug(ctl, VSH_ERR_INFO, "%s: found option <%s>: %s\n",
+ cmd->def->name, optname, n);
+
+ if (name)
+ *name = n;
+
+ return vshLookupDomainInternal(ctl, cmd->def->name, n, flags);
+}
+
VIR_ENUM_DECL(vshDomainVcpuState)
VIR_ENUM_IMPL(vshDomainVcpuState,
VIR_VCPU_LAST,
diff --git a/tools/virsh-domain.h b/tools/virsh-domain.h
index f03a0bb..f46538f 100644
--- a/tools/virsh-domain.h
+++ b/tools/virsh-domain.h
@@ -28,6 +28,10 @@
# include "virsh.h"
+virDomainPtr vshLookupDomainBy(vshControl *ctl,
+ const char *name,
+ unsigned int flags);
+
virDomainPtr vshCommandOptDomainBy(vshControl *ctl, const vshCmd *cmd,
const char **name, unsigned int flags);
--
2.0.2