[PATCH v6 07/19] tpm: Refactor virTPMEmulatorInit to use loop

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



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 | 82 +++++++++++++++++++++--------------------------
 1 file changed, 37 insertions(+), 45 deletions(-)

diff --git a/src/util/virtpm.c b/src/util/virtpm.c
index d35848d2f2..6df225f4e4 100644
--- a/src/util/virtpm.c
+++ b/src/util/virtpm.c
@@ -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;
         }
     }
 
-- 
2.20.1

--
libvir-list mailing list
libvir-list@xxxxxxxxxx
https://www.redhat.com/mailman/listinfo/libvir-list




[Index of Archives]     [Virt Tools]     [Libvirt Users]     [Lib OS Info]     [Fedora Users]     [Fedora Desktop]     [Fedora SELinux]     [Big List of Linux Books]     [Yosemite News]     [KDE Users]     [Fedora Tools]

  Powered by Linux