On Fri, Jul 12, 2019 at 12:23:42PM -0400, Stefan Berger wrote: > Refactor virTPMEmulatorInit to use a loop with parameters. This allows > for easier extension later on. > > Signed-off-by: Stefan Berger <stefanb@xxxxxxxxxxxxx> > Reviewed-by: Marc-André Lureau <marcandre.lureau@xxxxxxxxxx> > --- > src/util/virtpm.c | 80 ++++++++++++++++++++++------------------------- > 1 file changed, 37 insertions(+), 43 deletions(-) > > diff --git a/src/util/virtpm.c b/src/util/virtpm.c > index 4635d8add0..0179b1e8be 100644 > --- a/src/util/virtpm.c > +++ b/src/util/virtpm.c > @@ -113,51 +113,45 @@ virTPMGetSwtpmIoctl(void) > int > virTPMEmulatorInit(void) > { > - if (!swtpm_path) { > - swtpm_path = virFindFileInPath("swtpm"); > - if (!swtpm_path) { > - virReportSystemError(ENOENT, "%s", > - _("Unable to find 'swtpm' binary in $PATH")); > - return -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, > } > - if (!virFileIsExecutable(swtpm_path)) { > - virReportError(VIR_ERR_INTERNAL_ERROR, > - _("TPM emulator %s is not an executable"), > - swtpm_path); > - VIR_FREE(swtpm_path); > - return -1; > - } > - } > - > - if (!swtpm_setup) { > - swtpm_setup = virFindFileInPath("swtpm_setup"); > - if (!swtpm_setup) { > - virReportError(VIR_ERR_INTERNAL_ERROR, "%s", > - _("Could not find 'swtpm_setup' in PATH")); > - return -1; > - } > - if (!virFileIsExecutable(swtpm_setup)) { > - virReportError(VIR_ERR_INTERNAL_ERROR, > - _("'%s' is not an executable"), > - swtpm_setup); > - VIR_FREE(swtpm_setup); > - return -1; > - } > - } > + }; > + size_t i; > > - if (!swtpm_ioctl) { > - swtpm_ioctl = virFindFileInPath("swtpm_ioctl"); > - if (!swtpm_ioctl) { > - virReportError(VIR_ERR_INTERNAL_ERROR, "%s", > - _("Could not find swtpm_ioctl in PATH")); > - return -1; > - } > - if (!virFileIsExecutable(swtpm_ioctl)) { > - virReportError(VIR_ERR_INTERNAL_ERROR, > - _("swtpm_ioctl program %s is not an executable"), > - swtpm_ioctl); > - VIR_FREE(swtpm_ioctl); > - return -1; > + for (i = 0; i < ARRAY_CARDINALITY(prgs); i++) { > + char *path; > + bool findit = *prgs[i].path == NULL; > + > + if (findit) { Not seeing the neeed for the 'if(findit)' conditional - especially if you change to use virOnce, this code shold only ever be run once. > + path = virFindFileInPath(prgs[i].name); > + if (!path) { > + virReportSystemError(ENOENT, > + _("Unable to find '%s' binary in $PATH"), > + prgs[i].name); > + return -1; > + } > + if (!virFileIsExecutable(path)) { > + virReportError(VIR_ERR_INTERNAL_ERROR, > + _("%s is not an executable"), > + path); > + VIR_FREE(path); > + return -1; > + } > + *prgs[i].path = path; > } > } > > -- > 2.20.1 > Regards, Daniel -- |: https://berrange.com -o- https://www.flickr.com/photos/dberrange :| |: https://libvirt.org -o- https://fstop138.berrange.com :| |: https://entangle-photo.org -o- https://www.instagram.com/dberrange :| -- libvir-list mailing list libvir-list@xxxxxxxxxx https://www.redhat.com/mailman/listinfo/libvir-list