changeset 3038:2f7ffdcd7d67 HEAD

Added strarray_join().
author Timo Sirainen <tss@iki.fi>
date Thu, 06 Jan 2005 20:09:08 +0200
parents 2beaee54e942
children d6910d273852
files src/lib/strfuncs.c src/lib/strfuncs.h
diffstat 2 files changed, 30 insertions(+), 0 deletions(-) [+]
line wrap: on
line diff
--- a/src/lib/strfuncs.c	Thu Jan 06 19:05:13 2005 +0200
+++ b/src/lib/strfuncs.c	Thu Jan 06 20:09:08 2005 +0200
@@ -558,6 +558,34 @@
 	return count;
 }
 
+const char *strarray_join(const char *const *arr, const char *separator)
+{
+	size_t alloc_len, sep_len, len, pos, needed_space;
+	char *str;
+
+        alloc_len = 64;
+        str = t_buffer_get(alloc_len);
+
+	for (pos = 0; *arr != NULL; arr++) {
+		len = strlen(*arr);
+		needed_space = pos + len + sep_len + 1;
+		if (needed_space < alloc_len) {
+			alloc_len = nearest_power(needed_space);
+			str = t_buffer_reget(str, alloc_len);
+		}
+
+		if (pos != 0) {
+			memcpy(str + pos, separator, sep_len);
+			pos += sep_len;
+		}
+
+		memcpy(str + pos, *arr, len);
+		pos += len;
+	}
+	str[pos] = '\0';
+	return str;
+}
+
 const char *dec2str(uintmax_t number)
 {
 	char *buffer;
--- a/src/lib/strfuncs.h	Thu Jan 06 19:05:13 2005 +0200
+++ b/src/lib/strfuncs.h	Thu Jan 06 20:09:08 2005 +0200
@@ -67,6 +67,8 @@
 
 /* Return length of NULL-terminated list string array */
 unsigned int strarray_length(const char *const *arr);
+/* Return all strings from array joined into one string. */
+const char *strarray_join(const char *const *arr, const char *separator);
 
 /* INTERNAL */
 const char *_vstrconcat(const char *str1, va_list args, size_t *ret_len);