From 0cd4cd29042e3c08d39faee8f794f2cee0b261a3 Mon Sep 17 00:00:00 2001 From: Conrad Meyer Date: Tue, 11 Nov 2014 10:35:06 -0500 Subject: [PATCH] bhyve: Probe grub-bhyve for --cons-dev capability --- src/bhyve/bhyve_capabilities.c | 37 ++++++++++++++++++++++++++++++++++ src/bhyve/bhyve_capabilities.h | 7 +++++++ 2 files changed, 44 insertions(+) diff --git a/src/bhyve/bhyve_capabilities.c b/src/bhyve/bhyve_capabilities.c index 132ce9169e..fff0312681 100644 --- a/src/bhyve/bhyve_capabilities.c +++ b/src/bhyve/bhyve_capabilities.c @@ -23,6 +23,7 @@ #include #include "viralloc.h" +#include "virfile.h" #include "virlog.h" #include "virstring.h" #include "cpu/cpu.h" @@ -104,3 +105,39 @@ virBhyveCapsBuild(void) virObjectUnref(caps); return NULL; } + +int +virBhyveProbeGrubCaps(virBhyveGrubCapsFlags *caps) +{ + char *binary, *help; + virCommandPtr cmd; + int ret, exit; + + ret = 0; + *caps = 0; + cmd = NULL; + help = NULL; + + binary = virFindFileInPath("grub-bhyve"); + if (binary == NULL) + goto out; + if (!virFileIsExecutable(binary)) + goto out; + + cmd = virCommandNew(binary); + virCommandAddArg(cmd, "--help"); + virCommandSetOutputBuffer(cmd, &help); + if (virCommandRun(cmd, &exit) < 0) { + ret = -1; + goto out; + } + + if (strstr(help, "--cons-dev") != NULL) + *caps |= BHYVE_GRUB_CAP_CONSDEV; + + out: + VIR_FREE(help); + virCommandFree(cmd); + VIR_FREE(binary); + return ret; +} diff --git a/src/bhyve/bhyve_capabilities.h b/src/bhyve/bhyve_capabilities.h index c52e0d0415..ccd8eb6cf2 100644 --- a/src/bhyve/bhyve_capabilities.h +++ b/src/bhyve/bhyve_capabilities.h @@ -26,4 +26,11 @@ virCapsPtr virBhyveCapsBuild(void); +/* These are bit flags: */ +typedef enum { + BHYVE_GRUB_CAP_CONSDEV = 1, +} virBhyveGrubCapsFlags; + +int virBhyveProbeGrubCaps(virBhyveGrubCapsFlags *caps); + #endif