From: Peter Krempa Date: Tue, 25 Jul 2017 13:11:31 +0000 (+0200) Subject: tests: utils: Add virTestLoadFilePath helper X-Git-Url: http://xenbits.xensource.com/gitweb?a=commitdiff_plain;h=d492b19259dc96a9233022bbcdb628f2e5fbdea6;p=libvirt.git tests: utils: Add virTestLoadFilePath helper This new helper loads and returns a file from 'abs_srcdir'. By using variable arguments for the function, it's not necessary to format the path separately in the test cases. Reviewed-by: Eric Blake --- diff --git a/tests/testutils.c b/tests/testutils.c index 7f1c4672b3..53ef351ef7 100644 --- a/tests/testutils.c +++ b/tests/testutils.c @@ -356,6 +356,57 @@ virTestLoadFile(const char *file, char **buf) return 0; } + +static char * +virTestLoadFileGetPath(const char *p, + va_list ap) +{ + virBuffer buf = VIR_BUFFER_INITIALIZER; + char *path = NULL; + + virBufferAddLit(&buf, abs_srcdir "/"); + + if (p) { + virBufferAdd(&buf, p, -1); + virBufferStrcatVArgs(&buf, ap); + } + + if (!(path = virBufferContentAndReset(&buf))) + VIR_TEST_VERBOSE("failed to format file path"); + + return path; +} + + +/** + * virTestLoadFilePath: + * @...: file name components terminated with a NULL + * + * Constructs the test file path from variable arguments and loads the file. + * 'abs_srcdir' is automatically prepended. + */ +char * +virTestLoadFilePath(const char *p, ...) +{ + char *path = NULL; + char *ret = NULL; + va_list ap; + + va_start(ap, p); + + if (!(path = virTestLoadFileGetPath(p, ap))) + goto cleanup; + + ignore_value(virTestLoadFile(path, &ret)); + + cleanup: + va_end(ap); + VIR_FREE(path); + + return ret; +} + + #ifndef WIN32 static void virTestCaptureProgramExecChild(const char *const argv[], diff --git a/tests/testutils.h b/tests/testutils.h index c7f02e468f..98dfa990e6 100644 --- a/tests/testutils.h +++ b/tests/testutils.h @@ -52,6 +52,8 @@ int virTestRun(const char *title, int (*body)(const void *data), const void *data); int virTestLoadFile(const char *file, char **buf); +char *virTestLoadFilePath(const char *p, ...) + ATTRIBUTE_SENTINEL; int virTestCaptureProgramOutput(const char *const argv[], char **buf, int maxlen); void virTestClearCommandPath(char *cmdset);