tools/virt-host-validate.c | 80 +++++++++++++++++++++----------------- 1 file changed, 45 insertions(+), 35 deletions(-)
It all started with me looking at the --help output which also
printed "bhyve" as supported hypervisor type. Well, it's not on
my Linux machine. To resolve this, I'm just creating a static
array of { "$driver", callback() } pairs and iterating over it.
The array is then initialized at compile time with supported
drivers.
Signed-off-by: Michal Privoznik <mprivozn@redhat.com>
---
tools/virt-host-validate.c | 80 +++++++++++++++++++++-----------------
1 file changed, 45 insertions(+), 35 deletions(-)
diff --git a/tools/virt-host-validate.c b/tools/virt-host-validate.c
index 426648a5d3..365b8acd92 100644
--- a/tools/virt-host-validate.c
+++ b/tools/virt-host-validate.c
@@ -29,6 +29,7 @@
#include "internal.h"
#include "virerror.h"
#include "virgettext.h"
+#include "virglibutil.h"
#include "virt-host-validate-common.h"
#if WITH_QEMU
@@ -44,26 +45,58 @@
# include "virt-host-validate-ch.h"
#endif
+typedef struct _virValidateCallbacks virValidateCallbacks;
+struct _virValidateCallbacks {
+ const char *name;
+ int (*callback)(void);
+};
+
+static virValidateCallbacks validateCallbacks[] = {
+#if WITH_QEMU
+ { "qemu", virHostValidateQEMU },
+#endif
+#if WITH_LXC
+ { "lxc", virHostValidateLXC },
+#endif
+#if WITH_BHYVE
+ { "bhyve", virHostValidateBhyve },
+#endif
+#if WITH_CH
+ { "ch", virHostValidateCh },
+#endif
+};
+
static void
show_help(FILE *out, const char *argv0)
{
+ g_autofree char *hvs = NULL;
+ char *hvs_list[G_N_ELEMENTS(validateCallbacks) + 1] = { };
+ size_t i;
+
+ for (i = 0; i < G_N_ELEMENTS(validateCallbacks); i++) {
+ hvs_list[i] = g_strdup_printf(" - %1$s", validateCallbacks[i].name);
+ }
+
+ hvs = g_strjoinv("\n", hvs_list);
+
+ for (i = 0; i < G_N_ELEMENTS(validateCallbacks); i++) {
+ g_free(hvs_list[i]);
+ }
+
fprintf(out,
_("\n"
"syntax: %1$s [OPTIONS] [HVTYPE]\n"
"\n"
" Hypervisor types:\n"
"\n"
- " - qemu\n"
- " - lxc\n"
- " - bhyve\n"
- " - ch\n"
+ "%2$s\n"
"\n"
" Options:\n"
" -h, --help Display command line help\n"
" -v, --version Display command version\n"
" -q, --quiet Don't display progress information\n"
"\n"),
- argv0);
+ argv0, hvs);
}
static void
@@ -87,6 +120,7 @@ main(int argc, char **argv)
int ret = EXIT_SUCCESS;
bool quiet = false;
bool usedHvname = false;
+ size_t i;
if (virGettextInitialize() < 0 ||
virErrorInitialize() < 0) {
@@ -126,37 +160,13 @@ main(int argc, char **argv)
virValidateSetQuiet(quiet);
-#if WITH_QEMU
- if (!hvname || STREQ(hvname, "qemu")) {
- usedHvname = true;
- if (virHostValidateQEMU() < 0)
- ret = EXIT_FAILURE;
+ for (i = 0; i < G_N_ELEMENTS(validateCallbacks); i++) {
+ if (!hvname || STREQ(hvname, validateCallbacks[i].name)) {
+ usedHvname = true;
+ if (validateCallbacks[i].callback() < 0)
+ ret = EXIT_FAILURE;
+ }
}
-#endif
-
-#if WITH_LXC
- if (!hvname || STREQ(hvname, "lxc")) {
- usedHvname = true;
- if (virHostValidateLXC() < 0)
- ret = EXIT_FAILURE;
- }
-#endif
-
-#if WITH_BHYVE
- if (!hvname || STREQ(hvname, "bhyve")) {
- usedHvname = true;
- if (virHostValidateBhyve() < 0)
- ret = EXIT_FAILURE;
- }
-#endif
-
-#if WITH_CH
- if (!hvname || STREQ(hvname, "ch")) {
- usedHvname = true;
- if (virHostValidateCh() < 0)
- ret = EXIT_FAILURE;
- }
-#endif
if (hvname && !usedHvname) {
fprintf(stderr, _("%1$s: unsupported hypervisor name %2$s\n"),
--
2.44.2
On a Thursday in 2024, Michal Privoznik wrote: >It all started with me looking at the --help output which also >printed "bhyve" as supported hypervisor type. It did not say it is a supported hypervisor type, it merely listed it as a supported option. I don't think we need this patch. It works as expected on my Linux machine: $ virt-host-validate bhyve virt-host-validate: unsupported hypervisor name bhyve Jano >Well, it's not on >my Linux machine. To resolve this, I'm just creating a static >array of { "$driver", callback() } pairs and iterating over it. >The array is then initialized at compile time with supported >drivers. > >Signed-off-by: Michal Privoznik <mprivozn@redhat.com> >--- > tools/virt-host-validate.c | 80 +++++++++++++++++++++----------------- > 1 file changed, 45 insertions(+), 35 deletions(-) > >diff --git a/tools/virt-host-validate.c b/tools/virt-host-validate.c >index 426648a5d3..365b8acd92 100644 >--- a/tools/virt-host-validate.c >+++ b/tools/virt-host-validate.c >@@ -29,6 +29,7 @@ > #include "internal.h" > #include "virerror.h" > #include "virgettext.h" >+#include "virglibutil.h" > > #include "virt-host-validate-common.h" > #if WITH_QEMU >@@ -44,26 +45,58 @@ > # include "virt-host-validate-ch.h" > #endif > >+typedef struct _virValidateCallbacks virValidateCallbacks; >+struct _virValidateCallbacks { >+ const char *name; >+ int (*callback)(void); >+}; >+ >+static virValidateCallbacks validateCallbacks[] = { >+#if WITH_QEMU >+ { "qemu", virHostValidateQEMU }, >+#endif >+#if WITH_LXC >+ { "lxc", virHostValidateLXC }, >+#endif >+#if WITH_BHYVE >+ { "bhyve", virHostValidateBhyve }, >+#endif >+#if WITH_CH >+ { "ch", virHostValidateCh }, >+#endif >+}; >+ > static void > show_help(FILE *out, const char *argv0) > { >+ g_autofree char *hvs = NULL; >+ char *hvs_list[G_N_ELEMENTS(validateCallbacks) + 1] = { }; >+ size_t i; >+ >+ for (i = 0; i < G_N_ELEMENTS(validateCallbacks); i++) { >+ hvs_list[i] = g_strdup_printf(" - %1$s", validateCallbacks[i].name); >+ } >+ >+ hvs = g_strjoinv("\n", hvs_list); >+ >+ for (i = 0; i < G_N_ELEMENTS(validateCallbacks); i++) { >+ g_free(hvs_list[i]); >+ } >+ > fprintf(out, > _("\n" > "syntax: %1$s [OPTIONS] [HVTYPE]\n" > "\n" > " Hypervisor types:\n" > "\n" >- " - qemu\n" >- " - lxc\n" >- " - bhyve\n" >- " - ch\n" >+ "%2$s\n" > "\n" > " Options:\n" > " -h, --help Display command line help\n" > " -v, --version Display command version\n" > " -q, --quiet Don't display progress information\n" > "\n"), >- argv0); >+ argv0, hvs); > } > > static void >@@ -87,6 +120,7 @@ main(int argc, char **argv) > int ret = EXIT_SUCCESS; > bool quiet = false; > bool usedHvname = false; >+ size_t i; > > if (virGettextInitialize() < 0 || > virErrorInitialize() < 0) { >@@ -126,37 +160,13 @@ main(int argc, char **argv) > > virValidateSetQuiet(quiet); > >-#if WITH_QEMU >- if (!hvname || STREQ(hvname, "qemu")) { >- usedHvname = true; >- if (virHostValidateQEMU() < 0) >- ret = EXIT_FAILURE; >+ for (i = 0; i < G_N_ELEMENTS(validateCallbacks); i++) { >+ if (!hvname || STREQ(hvname, validateCallbacks[i].name)) { >+ usedHvname = true; >+ if (validateCallbacks[i].callback() < 0) >+ ret = EXIT_FAILURE; >+ } > } >-#endif >- >-#if WITH_LXC >- if (!hvname || STREQ(hvname, "lxc")) { >- usedHvname = true; >- if (virHostValidateLXC() < 0) >- ret = EXIT_FAILURE; >- } >-#endif >- >-#if WITH_BHYVE >- if (!hvname || STREQ(hvname, "bhyve")) { >- usedHvname = true; >- if (virHostValidateBhyve() < 0) >- ret = EXIT_FAILURE; >- } >-#endif >- >-#if WITH_CH >- if (!hvname || STREQ(hvname, "ch")) { >- usedHvname = true; >- if (virHostValidateCh() < 0) >- ret = EXIT_FAILURE; >- } >-#endif > > if (hvname && !usedHvname) { > fprintf(stderr, _("%1$s: unsupported hypervisor name %2$s\n"), >-- >2.44.2 >
© 2016 - 2024 Red Hat, Inc.