提交 30439c1b 编写于 作者: A Andrea Bolognani

tests: Introduce testQemuCapsIterate()

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: NAndrea Bolognani <abologna@redhat.com>
Acked-by: NPeter Krempa <pkrempa@redhat.com>
上级 6000bd13
......@@ -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;
}
......@@ -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 */
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册