static int testCompareFiles(const char *vmx, const char *xml) { int ret = -1; char *vmxData = NULL; char *formatted = NULL; virDomainDefPtr def = NULL; if (virtTestLoadFile(vmx, &vmxData) < 0) goto cleanup; if (!(def = virVMXParseConfig(&ctx, xmlopt, vmxData))) goto cleanup; if (!virDomainDefCheckABIStability(def, def)) { fprintf(stderr, "ABI stability check failed on %s", vmx); goto cleanup; } if (!(formatted = virDomainDefFormat(def, VIR_DOMAIN_DEF_FORMAT_SECURE))) goto cleanup; if (virtTestCompareToFile(formatted, xml) < 0) goto cleanup; ret = 0; cleanup: VIR_FREE(vmxData); VIR_FREE(formatted); virDomainDefFree(def); return ret; }
static char * vmwareDomainXMLFromNative(virConnectPtr conn, const char *nativeFormat, const char *nativeConfig, unsigned int flags) { struct vmware_driver *driver = conn->privateData; virVMXContext ctx; virDomainDefPtr def = NULL; char *xml = NULL; virCheckFlags(0, NULL); if (STRNEQ(nativeFormat, "vmware-vmx")) { virReportError(VIR_ERR_INVALID_ARG, _("Unsupported config format '%s'"), nativeFormat); return NULL; } ctx.parseFileName = vmwareCopyVMXFileName; def = virVMXParseConfig(&ctx, driver->caps, nativeConfig); if (def != NULL) xml = virDomainDefFormat(def, VIR_DOMAIN_XML_INACTIVE); virDomainDefFree(def); return xml; }
static int testCompareFiles(const char *vmx, const char *xml) { int result = -1; char *vmxData = NULL; char *xmlData = NULL; char *formatted = NULL; virDomainDefPtr def = NULL; virErrorPtr err = NULL; if (virtTestLoadFile(vmx, &vmxData) < 0) { goto failure; } if (virtTestLoadFile(xml, &xmlData) < 0) { goto failure; } def = virVMXParseConfig(&ctx, xmlopt, vmxData); if (def == NULL) { err = virGetLastError(); fprintf(stderr, "ERROR: %s\n", err != NULL ? err->message : "<unknown>"); goto failure; } formatted = virDomainDefFormat(def, VIR_DOMAIN_XML_SECURE); if (formatted == NULL) { err = virGetLastError(); fprintf(stderr, "ERROR: %s\n", err != NULL ? err->message : "<unknown>"); goto failure; } if (STRNEQ(xmlData, formatted)) { virtTestDifference(stderr, xmlData, formatted); goto failure; } result = 0; failure: VIR_FREE(vmxData); VIR_FREE(xmlData); VIR_FREE(formatted); virDomainDefFree(def); return result; }
int vmwareLoadDomains(struct vmware_driver *driver) { virDomainDefPtr vmdef = NULL; virDomainObjPtr vm = NULL; char *vmxPath = NULL; char *vmx = NULL; vmwareDomainPtr pDomain; char *directoryName = NULL; char *fileName = NULL; int ret = -1; virVMXContext ctx; char *outbuf = NULL; char *str; char *saveptr = NULL; virCommandPtr cmd; ctx.parseFileName = vmwareCopyVMXFileName; cmd = virCommandNewArgList(VMRUN, "-T", driver->type == TYPE_PLAYER ? "player" : "ws", "list", NULL); virCommandSetOutputBuffer(cmd, &outbuf); if (virCommandRun(cmd, NULL) < 0) goto cleanup; for (str = outbuf; (vmxPath = strtok_r(str, "\n", &saveptr)) != NULL; str = NULL) { if (vmxPath[0] != '/') continue; if (virFileReadAll(vmxPath, 10000, &vmx) < 0) goto cleanup; if ((vmdef = virVMXParseConfig(&ctx, driver->xmlopt, vmx)) == NULL) { goto cleanup; } if (!(vm = virDomainObjListAdd(driver->domains, vmdef, driver->xmlopt, 0, NULL))) goto cleanup; pDomain = vm->privateData; if (VIR_STRDUP(pDomain->vmxPath, vmxPath) < 0) goto cleanup; vmwareDomainConfigDisplay(pDomain, vmdef); if ((vm->def->id = vmwareExtractPid(vmxPath)) < 0) goto cleanup; /* vmrun list only reports running vms */ virDomainObjSetState(vm, VIR_DOMAIN_RUNNING, VIR_DOMAIN_RUNNING_UNKNOWN); vm->persistent = 1; virObjectUnlock(vm); vmdef = NULL; vm = NULL; } ret = 0; cleanup: virCommandFree(cmd); VIR_FREE(outbuf); virDomainDefFree(vmdef); VIR_FREE(directoryName); VIR_FREE(fileName); VIR_FREE(vmx); virObjectUnref(vm); return ret; }