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

Reply via email to