{
virThread thread;
virQEMUCapsPtr caps;
+ const char *mock = VIR_TEST_MOCK("qemucapsprobe");
- VIR_TEST_PRELOAD(VIR_TEST_MOCK("qemucapsprobe"));
+ if (!virFileIsExecutable(mock)) {
+ perror(mock);
+ return EXIT_FAILURE;
+ }
+
+ VIR_TEST_PRELOAD(mock);
if (argc != 2) {
fprintf(stderr, "%s QEMU_binary\n", argv[0]);
virLogOutputPtr *outputs = NULL;
g_autofree char *baseprogname = NULL;
const char *progname;
-
- if (getenv("VIR_TEST_FILE_ACCESS"))
- VIR_TEST_PRELOAD(VIR_TEST_MOCK("virtest"));
+ g_autofree const char **preloads = NULL;
+ size_t npreloads = 0;
+ g_autofree char *mock = NULL;
+
+ if (getenv("VIR_TEST_FILE_ACCESS")) {
+ preloads = g_renew(const char *, preloads, npreloads + 2);
+ preloads[npreloads++] = VIR_TEST_MOCK("virtest");
+ preloads[npreloads] = NULL;
+ }
va_start(ap, func);
- while ((lib = va_arg(ap, const char *)))
- VIR_TEST_PRELOAD(lib);
+ while ((lib = va_arg(ap, const char *))) {
+ if (!virFileIsExecutable(lib)) {
+ perror(lib);
+ return EXIT_FAILURE;
+ }
+
+ preloads = g_renew(const char *, preloads, npreloads + 2);
+ preloads[npreloads++] = lib;
+ preloads[npreloads] = NULL;
+ }
va_end(ap);
+ if (preloads) {
+ mock = g_strjoinv(":", (char **)preloads);
+ VIR_TEST_PRELOAD(mock);
+ }
+
progname = baseprogname = g_path_get_basename(argv[0]);
if (STRPREFIX(progname, "lt-"))
progname += 3;
# define MOCK_EXT ".so"
#endif
-#define VIR_TEST_PRELOAD(lib) \
+#define VIR_TEST_PRELOAD(libs) \
do { \
const char *preload = getenv(PRELOAD_VAR); \
- if (preload == NULL || strstr(preload, lib) == NULL) { \
+ if (preload == NULL || strstr(preload, libs) == NULL) { \
char *newenv; \
- if (!virFileIsExecutable(lib)) { \
- perror(lib); \
- return EXIT_FAILURE; \
- } \
if (!preload) { \
- newenv = (char *) lib; \
+ newenv = (char *) libs; \
} else { \
- newenv = g_strdup_printf("%s:%s", lib, preload); \
+ newenv = g_strdup_printf("%s:%s", libs, preload); \
} \
g_setenv(PRELOAD_VAR, newenv, TRUE); \
FORCE_FLAT_NAMESPACE \