]> xenbits.xensource.com Git - people/liuw/libxenctrl-split/libvirt.git/commitdiff
Split out storage format 'compat' attribute sanity check
authorJán Tomko <jtomko@redhat.com>
Thu, 9 Apr 2015 08:48:49 +0000 (10:48 +0200)
committerJán Tomko <jtomko@redhat.com>
Mon, 13 Apr 2015 13:07:45 +0000 (15:07 +0200)
For future reuse in the snapshot XML.

src/conf/storage_conf.c
src/util/virstoragefile.c
src/util/virstoragefile.h

index 339f08f42d316a04c20b8767e11710877bc8cba0..990a528f23ad14c52e670e660eba3770a7ca5296 100644 (file)
@@ -1374,20 +1374,8 @@ virStorageVolDefParseXML(virStoragePoolDefPtr pool,
     }
 
     ret->target.compat = virXPathString("string(./target/compat)", ctxt);
-    if (ret->target.compat) {
-        char **version = virStringSplit(ret->target.compat, ".", 2);
-        unsigned int result;
-
-        if (!version || !version[1] ||
-            virStrToLong_ui(version[0], NULL, 10, &result) < 0 ||
-            virStrToLong_ui(version[1], NULL, 10, &result) < 0) {
-            virStringFreeList(version);
-            virReportError(VIR_ERR_XML_ERROR, "%s",
-                           _("forbidden characters in 'compat' attribute"));
-            goto error;
-        }
-        virStringFreeList(version);
-    }
+    if (virStorageFileCheckCompat(ret->target.compat) < 0)
+        goto error;
 
     if (virXPathNode("./target/nocow", ctxt))
         ret->target.nocow = true;
index 96be02e66e9d6cbf45bd7267a426146975b61750..824cf5dcab28be74132f5e53cf287b8310bf0c9a 100644 (file)
@@ -2873,3 +2873,32 @@ virStorageFileGetRelativeBackingPath(virStorageSourcePtr top,
     VIR_FREE(tmp);
     return ret;
 }
+
+
+/*
+ * virStorageFileCheckCompat
+ */
+int
+virStorageFileCheckCompat(const char *compat)
+{
+    char **version;
+    unsigned int result;
+    int ret = -1;
+
+    if (!compat)
+        return 0;
+
+    version = virStringSplit(compat, ".", 2);
+    if (!version || !version[1] ||
+        virStrToLong_ui(version[0], NULL, 10, &result) < 0 ||
+        virStrToLong_ui(version[1], NULL, 10, &result) < 0) {
+        virReportError(VIR_ERR_XML_ERROR, "%s",
+                       _("forbidden characters in 'compat' attribute"));
+        goto cleanup;
+    }
+    ret = 0;
+
+ cleanup:
+    virStringFreeList(version);
+    return ret;
+}
index b4c38086831d9309cfc9768227184e9e39388ff1..aa17a00e54508e1f017396752cb02d8c9bdc460c 100644 (file)
@@ -384,4 +384,5 @@ int virStorageFileGetRelativeBackingPath(virStorageSourcePtr from,
                                          char **relpath)
     ATTRIBUTE_NONNULL(1) ATTRIBUTE_NONNULL(2) ATTRIBUTE_NONNULL(3);
 
+int virStorageFileCheckCompat(const char *compat);
 #endif /* __VIR_STORAGE_FILE_H__ */