}
+int
+qemuDomainNVRAMPathFormat(virQEMUDriverConfigPtr cfg,
+ virDomainDefPtr def,
+ char **path)
+{
+ return virAsprintf(path, "%s/%s_VARS.fd", cfg->nvramDir, def->name);
+}
+
+
int
qemuDomainNVRAMPathGenerate(virQEMUDriverConfigPtr cfg,
virDomainDefPtr def)
{
if (def->os.loader &&
def->os.loader->type == VIR_DOMAIN_LOADER_TYPE_PFLASH &&
- def->os.loader->readonly == VIR_TRISTATE_SWITCH_ON &&
+ def->os.loader->readonly == VIR_TRISTATE_BOOL_YES &&
!def->os.loader->nvram) {
- return virAsprintf(&def->os.loader->nvram, "%s/%s_VARS.fd",
- cfg->nvramDir, def->name);
+ return qemuDomainNVRAMPathFormat(cfg, def, &def->os.loader->nvram);
}
return 0;
bool
qemuDomainDiskIsMissingLocalOptional(virDomainDiskDefPtr disk);
+int
+qemuDomainNVRAMPathFormat(virQEMUDriverConfigPtr cfg,
+ virDomainDefPtr def,
+ char **path);
+
int
qemuDomainNVRAMPathGenerate(virQEMUDriverConfigPtr cfg,
virDomainDefPtr def);
int nsnapshots;
int ncheckpoints;
virQEMUDriverConfigPtr cfg = NULL;
+ g_autofree char *nvram_path = NULL;
virCheckFlags(VIR_DOMAIN_UNDEFINE_MANAGED_SAVE |
VIR_DOMAIN_UNDEFINE_SNAPSHOTS_METADATA |
}
}
- if (vm->def->os.loader &&
- vm->def->os.loader->nvram &&
- virFileExists(vm->def->os.loader->nvram)) {
+ if (vm->def->os.firmware == VIR_DOMAIN_OS_DEF_FIRMWARE_EFI) {
+ if (qemuDomainNVRAMPathFormat(cfg, vm->def, &nvram_path) < 0)
+ goto endjob;
+ } else {
+ if (vm->def->os.loader &&
+ VIR_STRDUP(nvram_path, vm->def->os.loader->nvram) < 0)
+ goto endjob;
+ }
+
+ if (nvram_path && virFileExists(nvram_path)) {
if ((flags & VIR_DOMAIN_UNDEFINE_NVRAM)) {
- if (unlink(vm->def->os.loader->nvram) < 0) {
+ if (unlink(nvram_path) < 0) {
virReportSystemError(errno,
_("failed to remove nvram: %s"),
- vm->def->os.loader->nvram);
+ nvram_path);
goto endjob;
}
} else if (!(flags & VIR_DOMAIN_UNDEFINE_KEEP_NVRAM)) {