new function - catdupv()
This commit is contained in:
parent
333dd6026f
commit
e4713bf45d
|
@ -25,6 +25,9 @@
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#include "../common.h"
|
#include "../common.h"
|
||||||
|
|
||||||
|
#include <stdarg.h>
|
||||||
|
|
||||||
#include "catdup.h"
|
#include "catdup.h"
|
||||||
|
|
||||||
char * catdup(const char * s1, const char * s2)
|
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;
|
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;
|
||||||
|
}
|
||||||
|
|
|
@ -30,5 +30,6 @@
|
||||||
char * catdup(const char * s1, const char * s2);
|
char * catdup(const char * s1, const char * s2);
|
||||||
char * catdup3(const char * s1, const char * s2, const char * s3);
|
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 * 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 */
|
#endif /* #ifndef CATDUP_H__D42302F1_4D96_4EE4_AC09_E97ED5748277__INCLUDED */
|
||||||
|
|
Loading…
Reference in New Issue