提交 2fcbe9f9 编写于 作者: S Stefan Berger 提交者: Daniel P. Berrangé

tpm: Refactor virTPMEmulatorInit to use loop

Refactor virTPMEmulatorInit to use a loop with parameters. This allows
for easier extension later on.
Signed-off-by: NStefan Berger <stefanb@linux.ibm.com>
Reviewed-by: NMarc-André Lureau <marcandre.lureau@redhat.com>
Reviewed-by: NDaniel P. Berrangé <berrange@redhat.com>
上级 4777bbdd
......@@ -136,54 +136,46 @@ int
virTPMEmulatorInit(void)
{
int ret = -1;
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;
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;
if (!swtpm_setup) {
swtpm_setup = virFindFileInPath("swtpm_setup");
if (!swtpm_setup) {
virReportError(VIR_ERR_INTERNAL_ERROR, "%s",
_("Could not find 'swtpm_setup' in PATH"));
goto cleanup;
}
if (!virFileIsExecutable(swtpm_setup)) {
virReportError(VIR_ERR_INTERNAL_ERROR,
_("'%s' is not an executable"),
swtpm_setup);
VIR_FREE(swtpm_setup);
goto cleanup;
}
}
virMutexLock(&swtpm_tools_lock);
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;
for (i = 0; i < ARRAY_CARDINALITY(prgs); i++) {
VIR_AUTOFREE(char *) path = NULL;
bool findit = *prgs[i].path == NULL;
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(path)) {
virReportError(VIR_ERR_INTERNAL_ERROR,
_("%s is not an executable"),
path);
goto cleanup;
}
*prgs[i].path = path;
}
}
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册