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(a)redhat.com>
---
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