libcfe  0.12.1
some useful C-functions
strcat2.c
Go to the documentation of this file.
1 #include "config.h"
2 #include "strcat2.h"
3 
4 #include <stdlib.h>
5 #include <stddef.h>
6 #include <stdarg.h>
7 
8 #include "len.h"
9 
10 char *strcat2(const char *delim, unsigned int n, ...)
11 {
12  va_list ap;
13  char *s, *res = NULL;
14  size_t delim_len, s_len, res_len = 0;
15  unsigned int j, i;
16  if(delim != NULL)
17  delim_len = str_len(delim);
18  else
19  delim_len = 0;
20  va_start(ap, n);
21  for(j = 0; j < n; j++)
22  {
23  s = va_arg(ap, char *);
24  if(s != NULL)
25  {
26  s_len = str_len(s);
27  res = realloc(res, res_len + (j > 0 ? delim_len : 0) + s_len + 1);
28  if(j > 0)
29  {
30  for(i = 0; i < delim_len; i++)
31  res[res_len + i] = delim[i];
32  res_len += delim_len;
33  }
34  for(i = 0; i < s_len; i++)
35  res[res_len + i] = s[i];
36  res_len += s_len;
37  }
38  }
39  va_end(ap);
40  res[res_len] = '\0';
41  return res;
42 }
#define str_len(s)
Shorthand for counting &#39;\0&#39; terminating strings. See _len for more info.
Definition: len.h:17
char * strcat2(const char *delim, unsigned int n,...)
Definition: strcat2.c:10