2011/5/4 Jiri Denemark <jdene...@redhat.com>: > Reason is currently always set to 0 (i.e., *_UNKNOWN). > --- > src/esx/esx_driver.c | 54 ++++++++++++++++++++++++- > src/libxl/libxl_driver.c | 31 +++++++++++++- > src/lxc/lxc_driver.c | 33 ++++++++++++++- > src/openvz/openvz_driver.c | 32 ++++++++++++++- > src/phyp/phyp_driver.c | 12 +++++- > src/qemu/qemu_driver.c | 33 ++++++++++++++- > src/test/test_driver.c | 31 +++++++++++++- > src/uml/uml_driver.c | 32 ++++++++++++++- > src/vbox/vbox_tmpl.c | 56 +++++++++++++++++++++++++- > src/vmware/vmware_driver.c | 31 +++++++++++++- > src/xen/xen_driver.c | 18 ++++++++- > src/xen/xen_hypervisor.c | 34 +++++++++++++++- > src/xen/xen_hypervisor.h | 4 ++ > src/xen/xend_internal.c | 97 ++++++++++++++++++++++++++++++++----------- > src/xen/xend_internal.h | 1 + > src/xen/xm_internal.c | 19 ++++++++- > src/xen/xm_internal.h | 1 + > src/xen/xs_internal.c | 32 ++++++++++++++- > src/xen/xs_internal.h | 3 + > src/xenapi/xenapi_driver.c | 45 ++++++++++++++++++++- > 20 files changed, 559 insertions(+), 40 deletions(-) > > diff --git a/src/esx/esx_driver.c b/src/esx/esx_driver.c > index 543ebe6..94b0121 100644 > --- a/src/esx/esx_driver.c > +++ b/src/esx/esx_driver.c > @@ -2425,6 +2425,58 @@ esxDomainGetInfo(virDomainPtr domain, virDomainInfoPtr > info) > > > static int > +esxDomainGetState(virDomainPtr domain, int *state, int *reason) > +{ > + int result = -1; > + esxPrivate *priv = domain->conn->privateData; > + esxVI_String *propertyNameList = NULL; > + esxVI_ObjectContent *virtualMachine = NULL; > + esxVI_DynamicProperty *dynamicProperty = NULL; > + esxVI_VirtualMachinePowerState powerState; > + > + if (esxVI_EnsureSession(priv->primary) < 0) { > + return -1; > + } > + > + if (esxVI_String_AppendValueListToList(&propertyNameList, > + "runtime.powerState\0") < 0 || > + esxVI_LookupVirtualMachineByUuid(priv->primary, domain->uuid, > + propertyNameList, &virtualMachine, > + esxVI_Occurrence_RequiredItem) < 0) > { > + goto cleanup; > + } > + > + *state = VIR_DOMAIN_NOSTATE; > + if (reason) > + *reason = 0; > + > + for (dynamicProperty = virtualMachine->propSet; dynamicProperty != NULL; > + dynamicProperty = dynamicProperty->_next) { > + if (STREQ(dynamicProperty->name, "runtime.powerState")) { > + if (esxVI_VirtualMachinePowerState_CastFromAnyType > + (dynamicProperty->val, &powerState) < 0) { > + goto cleanup; > + } > + > + *state = esxVI_VirtualMachinePowerState_ConvertToLibvirt > + (powerState); > + } else { > + VIR_WARN("Unexpected '%s' property", dynamicProperty->name); > + } > + } > + > + result = 0; > + > + cleanup: > + esxVI_String_Free(&propertyNameList); > + esxVI_ObjectContent_Free(&virtualMachine); > + > + return result; > +} > +
This can be simplified to: static int esxDomainGetState(virDomainPtr domain, int *state, int *reason) { int result = -1; esxPrivate *priv = domain->conn->privateData; esxVI_String *propertyNameList = NULL; esxVI_ObjectContent *virtualMachine = NULL; esxVI_VirtualMachinePowerState powerState; if (esxVI_EnsureSession(priv->primary) < 0) { return -1; } if (esxVI_String_AppendValueToList(&propertyNameList, "runtime.powerState") < 0 || esxVI_LookupVirtualMachineByUuid(priv->primary, domain->uuid, propertyNameList, &virtualMachine, esxVI_Occurrence_RequiredItem) < 0 || esxVI_GetVirtualMachinePowerState(virtualMachine, &powerState) < 0) { goto cleanup; } *state = esxVI_VirtualMachinePowerState_ConvertToLibvirt(powerState); if (reason) { *reason = 0; } result = 0; cleanup: esxVI_String_Free(&propertyNameList); esxVI_ObjectContent_Free(&virtualMachine); return result; } Matthias -- libvir-list mailing list libvir-list@redhat.com https://www.redhat.com/mailman/listinfo/libvir-list