From 3b20e50ddbc2df3cd1954abb1ab10a3f141411ac Mon Sep 17 00:00:00 2001 From: Peter Krempa Date: Tue, 26 Aug 2014 14:16:01 +0200 Subject: [PATCH] virsh: domain: Split out code to lookup domain from string Split out guts of the function to reuse it to get domain objects from string. --- tools/virsh-domain.c | 82 ++++++++++++++++++++++++++++---------------- tools/virsh-domain.h | 4 +++ 2 files changed, 56 insertions(+), 30 deletions(-) diff --git a/tools/virsh-domain.c b/tools/virsh-domain.c index fcfbf7430d..befc87a5d7 100644 --- a/tools/virsh-domain.c +++ b/tools/virsh-domain.c @@ -60,15 +60,63 @@ # define SA_SIGINFO 0 #endif + +static virDomainPtr +vshLookupDomainInternal(vshControl *ctl, + const char *cmdname, + const char *name, + unsigned int flags) +{ + virDomainPtr dom = NULL; + int id; + virCheckFlags(VSH_BYID | VSH_BYUUID | VSH_BYNAME, NULL); + + /* try it by ID */ + if (flags & VSH_BYID) { + if (virStrToLong_i(name, NULL, 10, &id) == 0 && id >= 0) { + vshDebug(ctl, VSH_ERR_DEBUG, "%s: looks like ID\n", + cmdname); + dom = virDomainLookupByID(ctl->conn, id); + } + } + + /* try it by UUID */ + if (!dom && (flags & VSH_BYUUID) && + strlen(name) == VIR_UUID_STRING_BUFLEN-1) { + vshDebug(ctl, VSH_ERR_DEBUG, "%s: 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: trying as domain NAME\n", + cmdname); + dom = virDomainLookupByName(ctl->conn, name); + } + + if (!dom) + 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) { - 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; @@ -82,33 +130,7 @@ vshCommandOptDomainBy(vshControl *ctl, const vshCmd *cmd, 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); - 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); - } - /* 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); - } - - if (!dom) - vshError(ctl, _("failed to get domain '%s'"), n); - - return dom; + return vshLookupDomainInternal(ctl, cmd->def->name, n, flags); } VIR_ENUM_DECL(vshDomainVcpuState) diff --git a/tools/virsh-domain.h b/tools/virsh-domain.h index f03a0bb291..f46538fc69 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);