]> mj.ucw.cz Git - libucw.git/commitdiff
Added a function for joining an array of strings, using an optional
authorMartin Mares <mj@ucw.cz>
Fri, 28 Apr 2006 08:35:38 +0000 (10:35 +0200)
committerMartin Mares <mj@ucw.cz>
Fri, 28 Apr 2006 08:35:38 +0000 (10:35 +0200)
separator.

lib/mempool-str.c
lib/mempool.h
lib/mempool.t

index 96bc07dadfeb91ea05a56dc7bf04e6b146b89fa9..62fb18baabed110e5adbba1f5fb7cf62dcdcb2bc 100644 (file)
@@ -61,6 +61,28 @@ mp_multicat(struct mempool *p, ...)
   return buf;
 }
 
+char *
+mp_strjoin(struct mempool *p, char **a, uns n, uns sep)
+{
+  uns sizes[n];
+  uns len = 1;
+  for (uns i=0; i<n; i++)
+    len += sizes[i] = strlen(a[i]);
+  if (sep && n)
+    len += n-1;
+  char *dest = mp_alloc_fast_noalign(p, len);
+  char *d = dest;
+  for (uns i=0; i<n; i++)
+    {
+      if (sep && i)
+       *d++ = sep;
+      memcpy(d, a[i], sizes[i]);
+      d += sizes[i];
+    }
+  *d = 0;
+  return dest;
+}
+
 #ifdef TEST
 
 #include <stdio.h>
@@ -71,6 +93,9 @@ int main(void)
   char *s = mp_strdup(p, "12345");
   char *c = mp_multicat(p, "<<", s, ">>", NULL);
   puts(c);
+  char *a[] = { "bugs", "gnats", "insects" };
+  puts(mp_strjoin(p, a, 3, '.'));
+  puts(mp_strjoin(p, a, 3, 0));
   return 0;
 }
 
index 95727688ac9b8be0302d0fae414ce04b984569a9..6f6a7ffe1387a161428d583e69d560656172d014 100644 (file)
@@ -70,6 +70,7 @@ mp_strcat(struct mempool *mp, char *x, char *y)
 {
   return mp_multicat(mp, x, y, NULL);
 }
+char *mp_strjoin(struct mempool *p, char **a, uns n, uns sep);
 
 /* mempool-fmt.c */
 
index 0a3ccc41e8ada3fdd19345f9db1bdbc9e265564f..7a1f29785b9e5be66e92305ea5807b8628203783 100644 (file)
@@ -5,3 +5,5 @@ Out:    <Hello, World!><Hello,                                              World!>
 
 Run:   obj/lib/mempool-str-t
 Out:   <<12345>>
+       bugs.gnats.insects
+       bugsgnatsinsects