]> git.ipfire.org Git - thirdparty/libvirt.git/commitdiff
tests: Introduce testQemuCapsIterate()
authorAndrea Bolognani <abologna@redhat.com>
Thu, 7 Mar 2019 14:54:55 +0000 (15:54 +0100)
committerAndrea Bolognani <abologna@redhat.com>
Wed, 13 Mar 2019 10:07:10 +0000 (11:07 +0100)
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@redhat.com>
Acked-by: Peter Krempa <pkrempa@redhat.com>
tests/testutilsqemu.c
tests/testutilsqemu.h

index 03a3f86c62e328d6d8ddc2dde284594548db5c2e..dffe4739442234ea6a5fff6618cc0cf373ddf1d7 100644 (file)
@@ -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;
+}
index 5ae7f194737bd872673f25c5dfeaaf50fc53297b..183ce915f1c59b1b98822cf168908b36d7b31aa5 100644 (file)
@@ -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 */