This is a variable argument function that joins together paths with the system path separator (Unix='/', Windows='\\').
Signed-off-by: Chad Versace <[email protected]> --- tests/util/piglit-util.c | 51 ++++++++++++++++++++++++++++++++++++++++++++++++ tests/util/piglit-util.h | 13 ++++++++++++ 2 files changed, 64 insertions(+) diff --git a/tests/util/piglit-util.c b/tests/util/piglit-util.c index f01ff5e..07b5b31 100644 --- a/tests/util/piglit-util.c +++ b/tests/util/piglit-util.c @@ -347,3 +347,54 @@ piglit_source_dir(void) } return s; +} + +#ifdef _WIN32 +# define PIGLIT_PATH_SEP '\\' +#else +# define PIGLIT_PATH_SEP '/' +#endif + +size_t +piglit_join_paths(char buf[], size_t buf_size, int n, ...) +{ + char *dest = buf; + size_t size_written = 0; + + int i; + va_list va; + + if (buf_size == 0 || n < 1) + return 0; + + va_start(va, n); + + i = 0; + while (true) { + const char *p = va_arg(va, const char*); + + while (*p != 0) { + if (size_written == buf_size - 1) + break; + + *dest = *p; + ++dest; + ++p; + ++size_written; + } + + ++i; + if (i == n) + break; + + *dest = PIGLIT_PATH_SEP; + ++dest; + ++size_written; + } + + *dest = '\0'; + ++size_written; + + va_end(va); + return size_written; +} diff --git a/tests/util/piglit-util.h b/tests/util/piglit-util.h index b5e6d3a..269a590 100644 --- a/tests/util/piglit-util.h +++ b/tests/util/piglit-util.h @@ -135,6 +135,19 @@ char *piglit_load_text_file(const char *file_name, unsigned *size); const char* piglit_source_dir(void); +/** + * \brief Join paths together with the system path separator. + * + * On Unix, the path separator is '/'. On Windows, '\\'. + * + * The variable argument consists of \a n null-terminated strings. The + * resultant path is written to \a buf. No more than \a buf_size bytes are + * written to \a buf. The last byte written is always the null character. + * Returned is the number of bytes written, including the terminating null. + */ +size_t +piglit_join_paths(char buf[], size_t buf_size, int n, ...); + #ifdef __cplusplus } /* end extern "C" */ #endif -- 1.7.11.1 _______________________________________________ Piglit mailing list [email protected] http://lists.freedesktop.org/mailman/listinfo/piglit
