unsigned int flags,
virDomainXMLOption *xmlopt)
{
- g_autofree char *snapshot = NULL;
g_autofree char *driver = NULL;
g_autofree char *name = NULL;
g_autoptr(virStorageSource) src = virStorageSourceNew();
return -1;
}
- snapshot = virXMLPropString(node, "snapshot");
- if (snapshot) {
- def->snapshot = virDomainSnapshotLocationTypeFromString(snapshot);
- if (def->snapshot <= 0) {
- virReportError(VIR_ERR_CONFIG_UNSUPPORTED,
- _("unknown disk snapshot setting '%s'"),
- snapshot);
- return -1;
- }
- }
+ if (virXMLPropEnumDefault(node, "snapshot",
+ virDomainSnapshotLocationTypeFromString,
+ VIR_XML_PROP_NONZERO,
+ &def->snapshot,
+ VIR_DOMAIN_SNAPSHOT_LOCATION_DEFAULT) < 0)
+ return -1;
if (virXMLPropEnumDefault(node, "type",
virStorageTypeFromString,
return -1;
}
- if (!def->snapshot && (src->path || src->format))
+ if (def->snapshot == VIR_DOMAIN_SNAPSHOT_LOCATION_DEFAULT &&
+ (src->path || src->format))
def->snapshot = VIR_DOMAIN_SNAPSHOT_LOCATION_EXTERNAL;
def->name = g_steal_pointer(&name);
g_autofree xmlNodePtr *diskNodes = NULL;
size_t i;
int n;
- g_autofree char *memorySnapshot = NULL;
+ xmlNodePtr memoryNode = NULL;
bool offline = !!(flags & VIR_DOMAIN_SNAPSHOT_PARSE_OFFLINE);
virSaveCookieCallbacks *saveCookie = virDomainXMLOptionGetSaveCookie(xmlopt);
int domainflags = VIR_DOMAIN_DEF_PARSE_INACTIVE |
return NULL;
}
- memorySnapshot = virXPathString("string(./memory/@snapshot)", ctxt);
- def->memorysnapshotfile = virXPathString("string(./memory/@file)", ctxt);
- if (memorySnapshot) {
- def->memory = virDomainSnapshotLocationTypeFromString(memorySnapshot);
- if (def->memory <= 0) {
- virReportError(VIR_ERR_CONFIG_UNSUPPORTED,
- _("unknown memory snapshot setting '%s'"),
- memorySnapshot);
+ if ((memoryNode = virXPathNode("./memory", ctxt))) {
+ def->memorysnapshotfile = virXMLPropString(memoryNode, "file");
+
+ if (virXMLPropEnumDefault(memoryNode, "snapshot",
+ virDomainSnapshotLocationTypeFromString,
+ VIR_XML_PROP_NONZERO,
+ &def->memory,
+ VIR_DOMAIN_SNAPSHOT_LOCATION_DEFAULT) < 0)
return NULL;
- }
}
if (def->memory == VIR_DOMAIN_SNAPSHOT_LOCATION_DEFAULT) {
typedef struct _virDomainSnapshotDiskDef virDomainSnapshotDiskDef;
struct _virDomainSnapshotDiskDef {
char *name; /* name matching the <target dev='...' of the domain */
- int snapshot; /* virDomainSnapshotLocation */
+ virDomainSnapshotLocation snapshot;
/* details of wrapper external file. src is always non-NULL.
* XXX optimize this to allow NULL for internal snapshots? */
/* Additional public XML. */
int state; /* virDomainSnapshotState */
- int memory; /* virDomainMemorySnapshot */
+ virDomainSnapshotLocation memory;
char *memorysnapshotfile; /* memory state file when snapshot is external */
size_t ndisks; /* should not exceed dom->ndisks */