]> xenbits.xensource.com Git - libvirt.git/commitdiff
libxl: move libxlSaveImageOpen to libxl_domain
authorJim Fehlig <jfehlig@suse.com>
Wed, 26 Feb 2014 04:28:51 +0000 (21:28 -0700)
committerJim Fehlig <jfehlig@suse.com>
Wed, 19 Mar 2014 20:46:40 +0000 (14:46 -0600)
Move libxlSaveImageOpen from libxl_driver to libxl_domain for
use by other libxl modules.  For consistency, rename to
libxlDomainSaveImageOpen.

Signed-off-by: Jim Fehlig <jfehlig@suse.com>
src/libxl/libxl_domain.c
src/libxl/libxl_domain.h
src/libxl/libxl_driver.c

index c3ad8373d72d87d46e452ef19d9257cc5f536daf..c1fdfa62fe841bb1ca1dec752ceb8dbc9630e2fb 100644 (file)
@@ -23,6 +23,8 @@
 
 #include <config.h>
 
+#include <fcntl.h>
+
 #include "libxl_domain.h"
 
 #include "viralloc.h"
@@ -565,3 +567,77 @@ libxlDomainManagedSavePath(libxlDriverPrivatePtr driver, virDomainObjPtr vm) {
     virObjectUnref(cfg);
     return ret;
 }
+
+/*
+ * Open a saved image file and initialize domain definition from the header.
+ *
+ * Returns the opened fd on success, -1 on failure.
+ */
+int
+libxlDomainSaveImageOpen(libxlDriverPrivatePtr driver,
+                         libxlDriverConfigPtr cfg,
+                         const char *from,
+                         virDomainDefPtr *ret_def,
+                         libxlSavefileHeaderPtr ret_hdr)
+{
+    int fd;
+    virDomainDefPtr def = NULL;
+    libxlSavefileHeader hdr;
+    char *xml = NULL;
+
+    if ((fd = virFileOpenAs(from, O_RDONLY, 0, -1, -1, 0)) < 0) {
+        virReportSystemError(-fd,
+                             _("Failed to open domain image file '%s'"), from);
+        goto error;
+    }
+
+    if (saferead(fd, &hdr, sizeof(hdr)) != sizeof(hdr)) {
+        virReportError(VIR_ERR_OPERATION_FAILED,
+                       "%s", _("failed to read libxl header"));
+        goto error;
+    }
+
+    if (memcmp(hdr.magic, LIBXL_SAVE_MAGIC, sizeof(hdr.magic))) {
+        virReportError(VIR_ERR_INVALID_ARG, "%s", _("image magic is incorrect"));
+        goto error;
+    }
+
+    if (hdr.version > LIBXL_SAVE_VERSION) {
+        virReportError(VIR_ERR_OPERATION_FAILED,
+                       _("image version is not supported (%d > %d)"),
+                       hdr.version, LIBXL_SAVE_VERSION);
+        goto error;
+    }
+
+    if (hdr.xmlLen <= 0) {
+        virReportError(VIR_ERR_OPERATION_FAILED,
+                       _("invalid XML length: %d"), hdr.xmlLen);
+        goto error;
+    }
+
+    if (VIR_ALLOC_N(xml, hdr.xmlLen) < 0)
+        goto error;
+
+    if (saferead(fd, xml, hdr.xmlLen) != hdr.xmlLen) {
+        virReportError(VIR_ERR_OPERATION_FAILED, "%s", _("failed to read XML"));
+        goto error;
+    }
+
+    if (!(def = virDomainDefParseString(xml, cfg->caps, driver->xmlopt,
+                                        1 << VIR_DOMAIN_VIRT_XEN,
+                                        VIR_DOMAIN_XML_INACTIVE)))
+        goto error;
+
+    VIR_FREE(xml);
+
+    *ret_def = def;
+    *ret_hdr = hdr;
+
+    return fd;
+
+error:
+    VIR_FREE(xml);
+    virDomainDefFree(def);
+    VIR_FORCE_CLOSE(fd);
+    return -1;
+}
index 5558009c3fb2bce5c96d1075fb67a82c109e64f6..3c1f5c0f586e522551837cccb5fa769365f8d39b 100644 (file)
@@ -99,4 +99,12 @@ char *
 libxlDomainManagedSavePath(libxlDriverPrivatePtr driver,
                            virDomainObjPtr vm);
 
+int
+libxlDomainSaveImageOpen(libxlDriverPrivatePtr driver,
+                         libxlDriverConfigPtr cfg,
+                         const char *from,
+                         virDomainDefPtr *ret_def,
+                         libxlSavefileHeaderPtr ret_hdr)
+    ATTRIBUTE_NONNULL(4) ATTRIBUTE_NONNULL(5);
+
 #endif /* LIBXL_DOMAIN_H */
index 1d3cfca497f84e02af6fdf567957cc08e1c1d2cf..fe1575e674eaed1d635cfeac348dbad9cda2ccf9 100644 (file)
@@ -168,78 +168,6 @@ cleanup:
     return ret;
 }
 
-/*
- * This internal function expects the driver lock to already be held on
- * entry.
- */
-static int ATTRIBUTE_NONNULL(4) ATTRIBUTE_NONNULL(5)
-libxlSaveImageOpen(libxlDriverPrivatePtr driver,
-                   libxlDriverConfigPtr cfg,
-                   const char *from,
-                   virDomainDefPtr *ret_def,
-                   libxlSavefileHeaderPtr ret_hdr)
-{
-    int fd;
-    virDomainDefPtr def = NULL;
-    libxlSavefileHeader hdr;
-    char *xml = NULL;
-
-    if ((fd = virFileOpenAs(from, O_RDONLY, 0, -1, -1, 0)) < 0) {
-        virReportSystemError(-fd,
-                             _("Failed to open domain image file '%s'"), from);
-        goto error;
-    }
-
-    if (saferead(fd, &hdr, sizeof(hdr)) != sizeof(hdr)) {
-        virReportError(VIR_ERR_OPERATION_FAILED,
-                       "%s", _("failed to read libxl header"));
-        goto error;
-    }
-
-    if (memcmp(hdr.magic, LIBXL_SAVE_MAGIC, sizeof(hdr.magic))) {
-        virReportError(VIR_ERR_INVALID_ARG, "%s", _("image magic is incorrect"));
-        goto error;
-    }
-
-    if (hdr.version > LIBXL_SAVE_VERSION) {
-        virReportError(VIR_ERR_OPERATION_FAILED,
-                       _("image version is not supported (%d > %d)"),
-                       hdr.version, LIBXL_SAVE_VERSION);
-        goto error;
-    }
-
-    if (hdr.xmlLen <= 0) {
-        virReportError(VIR_ERR_OPERATION_FAILED,
-                       _("invalid XML length: %d"), hdr.xmlLen);
-        goto error;
-    }
-
-    if (VIR_ALLOC_N(xml, hdr.xmlLen) < 0)
-        goto error;
-
-    if (saferead(fd, xml, hdr.xmlLen) != hdr.xmlLen) {
-        virReportError(VIR_ERR_OPERATION_FAILED, "%s", _("failed to read XML"));
-        goto error;
-    }
-
-    if (!(def = virDomainDefParseString(xml, cfg->caps, driver->xmlopt,
-                                        1 << VIR_DOMAIN_VIRT_XEN,
-                                        VIR_DOMAIN_XML_INACTIVE)))
-        goto error;
-
-    VIR_FREE(xml);
-
-    *ret_def = def;
-    *ret_hdr = hdr;
-
-    return fd;
-
-error:
-    VIR_FREE(xml);
-    virDomainDefFree(def);
-    VIR_FORCE_CLOSE(fd);
-    return -1;
-}
 
 /*
  * Core dump domain to default dump path.
@@ -712,9 +640,9 @@ libxlVmStart(libxlDriverPrivatePtr driver, virDomainObjPtr vm,
 
         if (virFileExists(managed_save_path)) {
 
-            managed_save_fd = libxlSaveImageOpen(driver, cfg,
-                                                 managed_save_path,
-                                                 &def, &hdr);
+            managed_save_fd = libxlDomainSaveImageOpen(driver, cfg,
+                                                       managed_save_path,
+                                                       &def, &hdr);
             if (managed_save_fd < 0)
                 goto endjob;
 
@@ -2142,7 +2070,7 @@ libxlDomainRestoreFlags(virConnectPtr conn, const char *from,
         return -1;
     }
 
-    fd = libxlSaveImageOpen(driver, cfg, from, &def, &hdr);
+    fd = libxlDomainSaveImageOpen(driver, cfg, from, &def, &hdr);
     if (fd < 0)
         goto cleanup_unlock;