From 21f58a58548ad45cc0bf83dc3d080cce09eee701 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?J=C3=A1n=20Tomko?= Date: Tue, 10 Feb 2015 15:10:05 +0100 Subject: [PATCH] Parse backingStore before capacity in volume XML So we can allow omitting the capacity element if backing store is present. --- src/conf/storage_conf.c | 62 ++++++++++++++++++++--------------------- 1 file changed, 31 insertions(+), 31 deletions(-) diff --git a/src/conf/storage_conf.c b/src/conf/storage_conf.c index 30908861c9..b522a4d5e4 100644 --- a/src/conf/storage_conf.c +++ b/src/conf/storage_conf.c @@ -1289,6 +1289,37 @@ virStorageVolDefParseXML(virStoragePoolDefPtr pool, } } + if ((backingStore = virXPathString("string(./backingStore/path)", ctxt))) { + if (VIR_ALLOC(ret->target.backingStore) < 0) + goto error; + + ret->target.backingStore->path = backingStore; + backingStore = NULL; + + if (options->formatFromString) { + char *format = virXPathString("string(./backingStore/format/@type)", ctxt); + if (format == NULL) + ret->target.backingStore->format = options->defaultFormat; + else + ret->target.backingStore->format = (options->formatFromString)(format); + + if (ret->target.backingStore->format < 0) { + virReportError(VIR_ERR_CONFIG_UNSUPPORTED, + _("unknown volume format type %s"), format); + VIR_FREE(format); + goto error; + } + VIR_FREE(format); + } + + if (VIR_ALLOC(ret->target.backingStore->perms) < 0) + goto error; + if (virStorageDefParsePerms(ctxt, ret->target.backingStore->perms, + "./backingStore/permissions", + DEFAULT_VOL_PERM_MODE) < 0) + goto error; + } + capacity = virXPathString("string(./capacity)", ctxt); unit = virXPathString("string(./capacity/@unit)", ctxt); if (capacity == NULL) { @@ -1341,37 +1372,6 @@ virStorageVolDefParseXML(virStoragePoolDefPtr pool, goto error; } - if ((backingStore = virXPathString("string(./backingStore/path)", ctxt))) { - if (VIR_ALLOC(ret->target.backingStore) < 0) - goto error; - - ret->target.backingStore->path = backingStore; - backingStore = NULL; - - if (options->formatFromString) { - char *format = virXPathString("string(./backingStore/format/@type)", ctxt); - if (format == NULL) - ret->target.backingStore->format = options->defaultFormat; - else - ret->target.backingStore->format = (options->formatFromString)(format); - - if (ret->target.backingStore->format < 0) { - virReportError(VIR_ERR_CONFIG_UNSUPPORTED, - _("unknown volume format type %s"), format); - VIR_FREE(format); - goto error; - } - VIR_FREE(format); - } - - if (VIR_ALLOC(ret->target.backingStore->perms) < 0) - goto error; - if (virStorageDefParsePerms(ctxt, ret->target.backingStore->perms, - "./backingStore/permissions", - DEFAULT_VOL_PERM_MODE) < 0) - goto error; - } - ret->target.compat = virXPathString("string(./target/compat)", ctxt); if (ret->target.compat) { char **version = virStringSplit(ret->target.compat, ".", 2); -- GitLab