提交 21f58a58 编写于 作者: J Ján Tomko

Parse backingStore before capacity in volume XML

So we can allow omitting the capacity element if backing store is
present.
上级 cbd788eb
......@@ -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);
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册