new function - catdupv()

This commit is contained in:
Nedko Arnaudov 2010-09-20 00:22:19 +03:00
parent 333dd6026f
commit e4713bf45d
2 changed files with 50 additions and 0 deletions

View File

@ -25,6 +25,9 @@
*/
#include "../common.h"
#include <stdarg.h>
#include "catdup.h"
char * catdup(const char * s1, const char * s2)
@ -104,3 +107,49 @@ char * catdup4(const char * s1, const char * s2, const char * s3, const char * s
return buffer;
}
char * catdupv(const char * s1, const char * s2, ...)
{
va_list ap;
const char * str;
size_t len;
char * buffer;
char * p;
len = strlen(s1) + strlen(s2);
va_start(ap, s2);
while ((str = va_arg(ap, const char *)) != NULL)
{
len += strlen(str);
}
va_end(ap);
len++;
buffer = malloc(len);
if (buffer == NULL)
{
log_error("malloc(%zu) failed.", len);
return NULL;
}
len = strlen(s1);
memcpy(buffer, s1, len);
p = buffer + len;
len = strlen(s2);
memcpy(p, s2, len);
p += len;
va_start(ap, s2);
while ((str = va_arg(ap, const char *)) != NULL)
{
len = strlen(str);
memcpy(p, str, len);
p += len;
}
va_end(ap);
*p = 0;
return buffer;
}

View File

@ -30,5 +30,6 @@
char * catdup(const char * s1, const char * s2);
char * catdup3(const char * s1, const char * s2, const char * s3);
char * catdup4(const char * s1, const char * s2, const char * s3, const char * s4);
char * catdupv(const char * s1, const char * s2, ...);
#endif /* #ifndef CATDUP_H__D42302F1_4D96_4EE4_AC09_E97ED5748277__INCLUDED */