]> mj.ucw.cz Git - libucw.git/commitdiff
Added mp_strcat() and mp_multicat().
authorMartin Mares <mj@ucw.cz>
Mon, 3 May 2004 10:45:18 +0000 (10:45 +0000)
committerMartin Mares <mj@ucw.cz>
Mon, 3 May 2004 10:45:18 +0000 (10:45 +0000)
lib/pool-str.c [new file with mode: 0644]
lib/pool.c
lib/pools.h

diff --git a/lib/pool-str.c b/lib/pool-str.c
new file mode 100644 (file)
index 0000000..8dc6d23
--- /dev/null
@@ -0,0 +1,52 @@
+/*
+ *     Sherlock Library -- Memory Pools (String Operations)
+ *
+ *     (c) 2004 Martin Mares <mj@ucw.cz>
+ *
+ *     This software may be freely distributed and used according to the terms
+ *     of the GNU Lesser General Public License.
+ */
+
+#include "lib/lib.h"
+#include "lib/pools.h"
+
+#include <alloca.h>
+#include <string.h>
+
+char *
+mp_strdup(struct mempool *p, char *s)
+{
+  uns l = strlen(s) + 1;
+  char *t = mp_alloc_fast_noalign(p, l);
+  memcpy(t, s, l);
+  return t;
+}
+
+char *
+mp_multicat(struct mempool *p, ...)
+{
+  va_list args, a;
+  va_start(args, p);
+  char *x, *y;
+  uns cnt = 0;
+  a = args;
+  while (x = va_arg(a, char *))
+    cnt++;
+  uns *sizes = alloca(cnt * sizeof(uns));
+  uns len = 1;
+  cnt = 0;
+  a = args;
+  while (x = va_arg(a, char *))
+    len += sizes[cnt++] = strlen(x);
+  char *buf = mp_alloc_fast_noalign(p, len);
+  y = buf;
+  a = args;
+  cnt = 0;
+  while (x = va_arg(a, char *))
+    {
+      memcpy(y, x, sizes[cnt]);
+      y += sizes[cnt++];
+    }
+  *y = 0;
+  return buf;
+}
index d581466ba210c87b8a3cb92dea9778a9f78cf259..8b7c372518b232f1f28cf2bda6b2d43bf5264067 100644 (file)
@@ -109,12 +109,3 @@ mp_alloc_zero(struct mempool *p, uns s)
   bzero(x, s);
   return x;
 }
-
-char *
-mp_strdup(struct mempool *p, char *s)
-{
-  uns l = strlen(s) + 1;
-  char *t = mp_alloc_fast_noalign(p, l);
-  memcpy(t, s, l);
-  return t;
-}
index ff9250dcb5f3d0d7dd80f0ef4e5ccb5abe62b684..540e8e60cc690bb939d10b700735b295ededa1ca 100644 (file)
@@ -26,7 +26,6 @@ void mp_delete(struct mempool *);
 void mp_flush(struct mempool *);
 void *mp_alloc(struct mempool *, uns);
 void *mp_alloc_zero(struct mempool *, uns);
-char *mp_strdup(struct mempool *, char *);
 
 static inline void *mp_alloc_fast(struct mempool *p, uns l)
 {
@@ -61,4 +60,14 @@ mp_end_string(struct mempool *p, void *stop)
   p->free = stop;
 }
 
+/* pool-str.c */
+
+char *mp_strdup(struct mempool *, char *);
+char *mp_multicat(struct mempool *, ...);
+static inline char *
+mp_strcat(struct mempool *mp, char *x, char *y)
+{
+  mp_multicat(mp, x, y, NULL);
+}
+
 #endif