[PATCH 7/8] tests: Introduce testQemuCapsIterate()

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

 



This function iterates over a directory containing
capabilities-related data, extract some useful bits of
information from the file name, and calls a user-provided
callback.

Signed-off-by: Andrea Bolognani <abologna@xxxxxxxxxx>
---
 tests/testutilsqemu.c | 53 +++++++++++++++++++++++++++++++++++++++++++
 tests/testutilsqemu.h |  8 +++++++
 2 files changed, 61 insertions(+)

diff --git a/tests/testutilsqemu.c b/tests/testutilsqemu.c
index 61bf67d5ad..407cf91925 100644
--- a/tests/testutilsqemu.c
+++ b/tests/testutilsqemu.c
@@ -865,3 +865,56 @@ testQemuGetLatestCapsForArch(const char *dirname,
     virDirClose(&dir);
     return ret;
 }
+
+
+int
+testQemuCapsIterate(const char *dirname,
+                    const char *suffix,
+                    testQemuCapsIterateCallback callback,
+                    void *opaque)
+{
+    struct dirent *ent;
+    DIR *dir = NULL;
+    int rc;
+    int ret = -1;
+
+    if (!callback)
+        return 0;
+
+    if (virDirOpen(&dir, dirname) < 0)
+        goto cleanup;
+
+    while ((rc = virDirRead(dir, &ent, dirname) > 0)) {
+        char *tmp = ent->d_name;
+        char *base = NULL;
+        char *archName = NULL;
+
+        /* Strip the trailing suffix, moving on if it's not present */
+        if (!virStringStripSuffix(tmp, suffix))
+            continue;
+
+        /* Find the last dot, moving on if none is present */
+        if (!(archName = strrchr(tmp, '.')))
+            continue;
+
+        /* The base name is everything before the last dot, and
+         * the architecture name everything after it */
+        base = tmp;
+        archName[0] = '\0';
+        archName++;
+
+        /* Run the user-provided callback */
+        if (callback(base, archName, opaque) < 0)
+            goto cleanup;
+    }
+
+    if (rc < 0)
+        goto cleanup;
+
+    ret = 0;
+
+ cleanup:
+    virDirClose(&dir);
+
+    return ret;
+}
diff --git a/tests/testutilsqemu.h b/tests/testutilsqemu.h
index 5ae7f19473..183ce915f1 100644
--- a/tests/testutilsqemu.h
+++ b/tests/testutilsqemu.h
@@ -63,6 +63,14 @@ char *testQemuGetLatestCapsForArch(const char *dirname,
                                    const char *arch,
                                    const char *suffix);
 
+typedef int (*testQemuCapsIterateCallback)(const char *base,
+                                           const char *archName,
+                                           void *opaque);
+int testQemuCapsIterate(const char *dirname,
+                        const char *suffix,
+                        testQemuCapsIterateCallback callback,
+                        void *opaque);
+
 # endif
 
 #endif /* LIBVIRT_TESTUTILSQEMU_H */
-- 
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