diff options
author | Osier Yang <jyang@redhat.com> | 2012-02-07 23:56:08 +0800 |
---|---|---|
committer | Osier Yang <jyang@redhat.com> | 2012-02-08 09:36:17 +0800 |
commit | c001eb5bbefd42b3976fe95ce7b9c53dd69a49a0 (patch) | |
tree | 74152a6296ebbcabeac17ce4352e36238d257ac5 | |
parent | python: drop unused function (diff) | |
download | libvirt-c001eb5bbefd42b3976fe95ce7b9c53dd69a49a0.tar.gz libvirt-c001eb5bbefd42b3976fe95ce7b9c53dd69a49a0.tar.bz2 libvirt-c001eb5bbefd42b3976fe95ce7b9c53dd69a49a0.zip |
virsh: Do not check the input XML at virsh layer for cmdDetachDevice
Any device XML doesn't use the same order as libvirt generates, or
uses decimal for attributes like "slot" of "<address>" will cause
device detaching to fail, as virsh compares the XML simply earlier
in strict manner before internal parsing.
This is regression introduced by ea7182c.
-rw-r--r-- | tools/virsh.c | 23 |
1 files changed, 5 insertions, 18 deletions
diff --git a/tools/virsh.c b/tools/virsh.c index d6fe680ba..bff7d5d90 100644 --- a/tools/virsh.c +++ b/tools/virsh.c @@ -13153,6 +13153,7 @@ cmdAttachDevice(vshControl *ctl, const vshCmd *cmd) * @n2 second node * returns true in case n1 covers n2, false otherwise. */ +ATTRIBUTE_UNUSED static bool vshNodeIsSuperset(xmlNodePtr n1, xmlNodePtr n2) { @@ -13278,6 +13279,7 @@ cleanup: * (is too ambiguous), 0 in case of success. Otherwise returns -1. @newXML * is touched only in case of success. */ +ATTRIBUTE_UNUSED static int vshCompleteXMLFromDomain(vshControl *ctl, virDomainPtr dom, char *oldXML, char **newXML) @@ -13412,7 +13414,7 @@ cmdDetachDevice(vshControl *ctl, const vshCmd *cmd) { virDomainPtr dom = NULL; const char *from = NULL; - char *buffer = NULL, *new_buffer = NULL; + char *buffer = NULL; int ret; bool funcRet = false; unsigned int flags; @@ -13431,27 +13433,13 @@ cmdDetachDevice(vshControl *ctl, const vshCmd *cmd) goto cleanup; } - ret = vshCompleteXMLFromDomain(ctl, dom, buffer, &new_buffer); - if (ret < 0) { - if (ret == -2) { - vshError(ctl, _("no such device in %s"), virDomainGetName(dom)); - } else if (ret == -3) { - vshError(ctl, "%s", _("given XML selects too many devices. " - "Please, be more specific")); - } else { - /* vshCompleteXMLFromDomain() already printed error message, - * so nothing to do here. */ - } - goto cleanup; - } - if (vshCommandOptBool(cmd, "persistent")) { flags = VIR_DOMAIN_AFFECT_CONFIG; if (virDomainIsActive(dom) == 1) flags |= VIR_DOMAIN_AFFECT_LIVE; - ret = virDomainDetachDeviceFlags(dom, new_buffer, flags); + ret = virDomainDetachDeviceFlags(dom, buffer, flags); } else { - ret = virDomainDetachDevice(dom, new_buffer); + ret = virDomainDetachDevice(dom, buffer); } if (ret < 0) { @@ -13463,7 +13451,6 @@ cmdDetachDevice(vshControl *ctl, const vshCmd *cmd) funcRet = true; cleanup: - VIR_FREE(new_buffer); VIR_FREE(buffer); virDomainFree(dom); return funcRet; |