tpm: Refactor virTPMEmulatorInit to use loop

Refactor virTPMEmulatorInit to use a loop with parameters. This allows
for easier extension later on.

Signed-off-by: Stefan Berger <stefanb@linux.ibm.com>
Reviewed-by: Marc-André Lureau <marcandre.lureau@redhat.com>
Reviewed-by: Daniel P. Berrangé <berrange@redhat.com>
This commit is contained in:
Stefan Berger 2019-07-25 14:22:03 -04:00 committed by Daniel P. Berrangé
parent 4777bbdd76
commit 2fcbe9f97d

View File

@ -136,54 +136,46 @@ int
virTPMEmulatorInit(void)
{
int ret = -1;
static const struct {
const char *name;
char **path;
} prgs[] = {
{
.name = "swtpm",
.path = &swtpm_path,
},
{
.name = "swtpm_setup",
.path = &swtpm_setup,
},
{
.name = "swtpm_ioctl",
.path = &swtpm_ioctl,
}
};
size_t i;
virMutexLock(&swtpm_tools_lock);
if (!swtpm_path) {
swtpm_path = virFindFileInPath("swtpm");
if (!swtpm_path) {
virReportSystemError(ENOENT, "%s",
_("Unable to find 'swtpm' binary in $PATH"));
goto cleanup;
}
if (!virFileIsExecutable(swtpm_path)) {
virReportError(VIR_ERR_INTERNAL_ERROR,
_("TPM emulator %s is not an executable"),
swtpm_path);
VIR_FREE(swtpm_path);
goto cleanup;
}
}
for (i = 0; i < ARRAY_CARDINALITY(prgs); i++) {
VIR_AUTOFREE(char *) path = NULL;
bool findit = *prgs[i].path == NULL;
if (!swtpm_setup) {
swtpm_setup = virFindFileInPath("swtpm_setup");
if (!swtpm_setup) {
virReportError(VIR_ERR_INTERNAL_ERROR, "%s",
_("Could not find 'swtpm_setup' in PATH"));
if (findit) {
path = virFindFileInPath(prgs[i].name);
if (!path) {
virReportSystemError(ENOENT,
_("Unable to find '%s' binary in $PATH"),
prgs[i].name);
goto cleanup;
}
if (!virFileIsExecutable(swtpm_setup)) {
if (!virFileIsExecutable(path)) {
virReportError(VIR_ERR_INTERNAL_ERROR,
_("'%s' is not an executable"),
swtpm_setup);
VIR_FREE(swtpm_setup);
_("%s is not an executable"),
path);
goto cleanup;
}
}
if (!swtpm_ioctl) {
swtpm_ioctl = virFindFileInPath("swtpm_ioctl");
if (!swtpm_ioctl) {
virReportError(VIR_ERR_INTERNAL_ERROR, "%s",
_("Could not find swtpm_ioctl in PATH"));
goto cleanup;
}
if (!virFileIsExecutable(swtpm_ioctl)) {
virReportError(VIR_ERR_INTERNAL_ERROR,
_("swtpm_ioctl program %s is not an executable"),
swtpm_ioctl);
VIR_FREE(swtpm_ioctl);
goto cleanup;
*prgs[i].path = path;
}
}