* of the GNU Lesser General Public License.
*/
-#include "ucw/lib.h"
-#include "ucw/mempool.h"
+#include <ucw/lib.h>
+#include <ucw/mempool.h>
#include <alloca.h>
#include <string.h>
char *
mp_strdup(struct mempool *p, const char *s)
{
- uns l = strlen(s) + 1;
+ if (!s)
+ return NULL;
+ size_t l = strlen(s) + 1;
char *t = mp_alloc_fast_noalign(p, l);
memcpy(t, s, l);
return t;
}
void *
-mp_memdup(struct mempool *p, const void *s, uns len)
+mp_memdup(struct mempool *p, const void *s, size_t len)
{
void *t = mp_alloc_fast(p, len);
memcpy(t, s, len);
va_list args, a;
va_start(args, p);
char *x, *y;
- uns cnt = 0;
+ uint cnt = 0;
va_copy(a, args);
while (x = va_arg(a, char *))
cnt++;
- uns *sizes = alloca(cnt * sizeof(uns));
- uns len = 1;
+ size_t *sizes = alloca(cnt * sizeof(*sizes));
+ size_t len = 1;
cnt = 0;
va_end(a);
va_copy(a, args);
}
char *
-mp_strjoin(struct mempool *p, char **a, uns n, uns sep)
+mp_strjoin(struct mempool *p, char **a, uint n, uint sep)
{
- uns sizes[n];
- uns len = 1;
- for (uns i=0; i<n; i++)
+ size_t sizes[n];
+ size_t len = 1;
+ for (uint 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++)
+ for (uint i=0; i<n; i++)
{
if (sep && i)
*d++ = sep;
return dest;
}
+char *
+mp_str_from_mem(struct mempool *a, const void *mem, size_t len)
+{
+ char *str = mp_alloc_noalign(a, len+1);
+ memcpy(str, mem, len);
+ str[len] = 0;
+ return str;
+}
+
#ifdef TEST
#include <stdio.h>
char *a[] = { "bugs", "gnats", "insects" };
puts(mp_strjoin(p, a, 3, '.'));
puts(mp_strjoin(p, a, 3, 0));
+ puts(mp_str_from_mem(p, s+1, 2));
return 0;
}