aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorOsier Yang <jyang@redhat.com>2012-02-07 23:56:08 +0800
committerOsier Yang <jyang@redhat.com>2012-02-08 09:36:17 +0800
commitc001eb5bbefd42b3976fe95ce7b9c53dd69a49a0 (patch)
tree74152a6296ebbcabeac17ce4352e36238d257ac5
parentpython: drop unused function (diff)
downloadlibvirt-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.c23
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;