[PATCH 5/9] qemu: conf: Use proper type for (save|dump|snapshot)ImageFormat

Peter Krempa via Devel posted 9 patches 3 days, 3 hours ago
[PATCH 5/9] qemu: conf: Use proper type for (save|dump|snapshot)ImageFormat
Posted by Peter Krempa via Devel 3 days, 3 hours ago
From: Peter Krempa <pkrempa@redhat.com>

Extract the definition of the enum into a separate header file and
convert the config struct to use the proper types.

Signed-off-by: Peter Krempa <pkrempa@redhat.com>
---
 src/qemu/qemu_conf.c             | 48 ++++++++++++++++++++++----------
 src/qemu/qemu_conf.h             |  7 +++--
 src/qemu/qemu_saveimage.h        | 20 ++-----------
 src/qemu/qemu_saveimage_format.h | 25 +++++++++++++++++
 4 files changed, 64 insertions(+), 36 deletions(-)
 create mode 100644 src/qemu/qemu_saveimage_format.h

diff --git a/src/qemu/qemu_conf.c b/src/qemu/qemu_conf.c
index 242955200a..de6e51177a 100644
--- a/src/qemu/qemu_conf.c
+++ b/src/qemu/qemu_conf.c
@@ -686,29 +686,47 @@ virQEMUDriverConfigLoadSaveEntry(virQEMUDriverConfig *cfg,

     if (virConfGetValueString(conf, "save_image_format", &savestr) < 0)
         return -1;
-    if (savestr && (cfg->saveImageFormat = qemuSaveFormatTypeFromString(savestr)) < 0) {
-        virReportError(VIR_ERR_CONFIG_UNSUPPORTED,
-                       _("Invalid save_image_format '%1$s'"),
-                       savestr);
-        return -1;
+    if (savestr) {
+        int formatVal;
+
+        if ((formatVal = qemuSaveFormatTypeFromString(savestr)) < 0) {
+            virReportError(VIR_ERR_CONFIG_UNSUPPORTED,
+                           _("Invalid save_image_format '%1$s'"),
+                           savestr);
+            return -1;
+        }
+
+        cfg->saveImageFormat = formatVal;
     }

     if (virConfGetValueString(conf, "dump_image_format", &dumpstr) < 0)
         return -1;
-    if (dumpstr && (cfg->dumpImageFormat = qemuSaveFormatTypeFromString(dumpstr)) < 0) {
-        virReportError(VIR_ERR_CONFIG_UNSUPPORTED,
-                       _("Invalid dump_image_format '%1$s'"),
-                       dumpstr);
-        return -1;
+    if (dumpstr) {
+        int formatVal;
+
+        if ((formatVal = qemuSaveFormatTypeFromString(dumpstr)) < 0) {
+            virReportError(VIR_ERR_CONFIG_UNSUPPORTED,
+                           _("Invalid dump_image_format '%1$s'"),
+                           dumpstr);
+            return -1;
+        }
+
+        cfg->dumpImageFormat = formatVal;
     }

     if (virConfGetValueString(conf, "snapshot_image_format", &snapstr) < 0)
         return -1;
-    if (snapstr && (cfg->snapshotImageFormat = qemuSaveFormatTypeFromString(snapstr)) < 0) {
-        virReportError(VIR_ERR_CONFIG_UNSUPPORTED,
-                       _("Invalid snapshot_image_format '%1$s'"),
-                       snapstr);
-        return -1;
+    if (snapstr) {
+        int formatVal;
+
+        if ((formatVal = qemuSaveFormatTypeFromString(snapstr)) < 0) {
+            virReportError(VIR_ERR_CONFIG_UNSUPPORTED,
+                           _("Invalid snapshot_image_format '%1$s'"),
+                           snapstr);
+            return -1;
+        }
+
+        cfg->snapshotImageFormat = formatVal;
     }

     if (virConfGetValueString(conf, "auto_dump_path", &cfg->autoDumpPath) < 0)
diff --git a/src/qemu/qemu_conf.h b/src/qemu/qemu_conf.h
index edb65c99f4..c284e108a1 100644
--- a/src/qemu/qemu_conf.h
+++ b/src/qemu/qemu_conf.h
@@ -37,6 +37,7 @@
 #include "locking/lock_manager.h"
 #include "qemu_capabilities.h"
 #include "qemu_nbdkit.h"
+#include "qemu_saveimage_format.h"
 #include "virclosecallbacks.h"
 #include "virhostdev.h"
 #include "virfile.h"
@@ -216,9 +217,9 @@ struct _virQEMUDriverConfig {
     bool securityDefaultConfined;
     bool securityRequireConfined;

-    int saveImageFormat;
-    int dumpImageFormat;
-    int snapshotImageFormat;
+    virQEMUSaveFormat saveImageFormat;
+    virQEMUSaveFormat dumpImageFormat;
+    virQEMUSaveFormat snapshotImageFormat;

     char *autoDumpPath;
     bool autoDumpBypassCache;
diff --git a/src/qemu/qemu_saveimage.h b/src/qemu/qemu_saveimage.h
index 0a22ee5f05..1fd96751a2 100644
--- a/src/qemu/qemu_saveimage.h
+++ b/src/qemu/qemu_saveimage.h
@@ -21,6 +21,7 @@
 #include "virconftypes.h"

 #include "qemu_domain.h"
+#include "qemu_saveimage_format.h"

 /* It would be nice to replace 'Qemud' with 'Qemu' but
  * this magic string is ABI, so it can't be changed
@@ -31,24 +32,7 @@

 G_STATIC_ASSERT(sizeof(QEMU_SAVE_MAGIC) == sizeof(QEMU_SAVE_PARTIAL));

-typedef enum {
-    QEMU_SAVE_FORMAT_RAW = 0,
-    QEMU_SAVE_FORMAT_GZIP = 1,
-    QEMU_SAVE_FORMAT_BZIP2 = 2,
-    /*
-     * Deprecated by xz and never used as part of a release
-     * QEMU_SAVE_FORMAT_LZMA
-     */
-    QEMU_SAVE_FORMAT_XZ = 3,
-    QEMU_SAVE_FORMAT_LZOP = 4,
-    QEMU_SAVE_FORMAT_ZSTD = 5,
-    QEMU_SAVE_FORMAT_SPARSE = 6,
-    /* Note: add new members only at the end.
-       These values are used in the on-disk format.
-       Do not change or re-use numbers. */
-
-    QEMU_SAVE_FORMAT_LAST
-} virQEMUSaveFormat;
+/* enum virQEMUSaveFormat is declared in qemu_saveimage_format.h */
 VIR_ENUM_DECL(qemuSaveFormat);

 typedef struct _virQEMUSaveHeader virQEMUSaveHeader;
diff --git a/src/qemu/qemu_saveimage_format.h b/src/qemu/qemu_saveimage_format.h
new file mode 100644
index 0000000000..53756f9fff
--- /dev/null
+++ b/src/qemu/qemu_saveimage_format.h
@@ -0,0 +1,25 @@
+/*
+ * SPDX-License-Identifier: LGPL-2.1-or-later
+ */
+
+#pragma once
+
+/* This enum resides in a separate file to allow inclusion into qemu_conf.h */
+typedef enum {
+    QEMU_SAVE_FORMAT_RAW = 0,
+    QEMU_SAVE_FORMAT_GZIP = 1,
+    QEMU_SAVE_FORMAT_BZIP2 = 2,
+    /*
+     * Deprecated by xz and never used as part of a release
+     * QEMU_SAVE_FORMAT_LZMA
+     */
+    QEMU_SAVE_FORMAT_XZ = 3,
+    QEMU_SAVE_FORMAT_LZOP = 4,
+    QEMU_SAVE_FORMAT_ZSTD = 5,
+    QEMU_SAVE_FORMAT_SPARSE = 6,
+    /* Note: add new members only at the end.
+       These values are used in the on-disk format.
+       Do not change or re-use numbers. */
+
+    QEMU_SAVE_FORMAT_LAST
+} virQEMUSaveFormat;
-- 
2.52.0