]> git.ipfire.org Git - thirdparty/libvirt.git/commitdiff
conf: introduce virDomainStorageSourceParseBase
authorPeter Krempa <pkrempa@redhat.com>
Wed, 20 Mar 2019 15:12:45 +0000 (16:12 +0100)
committerPeter Krempa <pkrempa@redhat.com>
Wed, 3 Apr 2019 09:58:09 +0000 (11:58 +0200)
The helper converts the 'type', 'format' and index values to enum
values/numbers and does validation.

Signed-off-by: Peter Krempa <pkrempa@redhat.com>
Reviewed-by: Ján Tomko <jtomko@redhat.com>
src/conf/domain_conf.c
src/conf/domain_conf.h
src/libvirt_private.syms

index 3761dc27a620651cc2f645fcdf3ce52e41f97356..a076d8222c78faff31ec4fd9429f5d71036ea140 100644 (file)
@@ -9039,6 +9039,45 @@ virDomainDiskSourcePRParse(xmlNodePtr node,
 }
 
 
+virStorageSourcePtr
+virDomainStorageSourceParseBase(const char *type,
+                                const char *format,
+                                const char *index)
+{
+    VIR_AUTOUNREF(virStorageSourcePtr) src = NULL;
+    virStorageSourcePtr ret = NULL;
+
+    if (!(src = virStorageSourceNew()))
+        return NULL;
+
+    src->type = VIR_STORAGE_TYPE_FILE;
+
+    if (type &&
+        (src->type = virStorageTypeFromString(type)) <= 0) {
+        virReportError(VIR_ERR_XML_ERROR,
+                       _("unknown storage source type '%s'"), type);
+        return NULL;
+    }
+
+    if (format &&
+        (src->format = virStorageFileFormatTypeFromString(format)) <= 0) {
+        virReportError(VIR_ERR_XML_ERROR,
+                       _("unknown storage source format '%s'"), format);
+        return NULL;
+    }
+
+    if (index &&
+        virStrToLong_uip(index, NULL, 10, &src->id) < 0) {
+        virReportError(VIR_ERR_XML_ERROR,
+                       _("invalid storage source index '%s'"), index);
+        return NULL;
+    }
+
+    VIR_STEAL_PTR(ret, src);
+    return ret;
+}
+
+
 int
 virDomainStorageSourceParse(xmlNodePtr node,
                             xmlXPathContextPtr ctxt,
index f550c257d6198bb173d9bbb8c7a360a5a246ffdc..ce6e5b47484a201142ec6ae77009581bafaaa567 100644 (file)
@@ -3452,6 +3452,11 @@ int virDomainDiskDefCheckDuplicateInfo(const virDomainDiskDef *a,
                                        const virDomainDiskDef *b)
     ATTRIBUTE_NONNULL(1) ATTRIBUTE_NONNULL(2);
 
+virStorageSourcePtr
+virDomainStorageSourceParseBase(const char *type,
+                                const char *format,
+                                const char *index)
+    ATTRIBUTE_RETURN_CHECK;
 
 int virDomainStorageSourceParse(xmlNodePtr node,
                                 xmlXPathContextPtr ctxt,
index 5bc807a2f14db52956b40f8662e83bba80c406fe..56143f6204fe9b2cc93c2c4f1e6eb0ce8a8283dc 100644 (file)
@@ -565,6 +565,7 @@ virDomainStateTypeFromString;
 virDomainStateTypeToString;
 virDomainStorageNetworkParseHost;
 virDomainStorageSourceParse;
+virDomainStorageSourceParseBase;
 virDomainTaintTypeFromString;
 virDomainTaintTypeToString;
 virDomainTimerModeTypeFromString;