[Piglit] [PATCH 5/9] util: Add piglit_join_paths()
Chad Versace
chad.versace at linux.intel.com
Mon Jul 9 10:43:33 PDT 2012
This is a variable argument function that joins together paths with the
system path separator (Unix='/', Windows='\\').
Signed-off-by: Chad Versace <chad.versace at linux.intel.com>
---
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
More information about the Piglit
mailing list