/*
** concat.c -- concatenate a variable number (minimum of 1)
**             of strings in managed memory
**
** This code is Copyright (c) 2002, by the authors of nmh.  See the
** COPYRIGHT file in the root directory of the nmh distribution for
** complete copyright information.
*/

#include <h/mh.h>
#include <h/utils.h>
#include <stdarg.h>


static char *
copy(char *from, char *to)
{
        while ((*to = *from)) {
                to++;
                from++;
        }
        return (to);
}


char *
concat(char *s1, ...)
{
	char *cp, *dp, *sp;
	size_t len;
	va_list list;

	len = strlen(s1) + 1;
	va_start(list, s1);
	while ((cp = va_arg(list, char *)))
		len += strlen(cp);
	va_end(list);

	dp = sp = mh_xcalloc(len, sizeof(char));

	sp = copy(s1, sp);

	va_start(list, s1);
	while ((cp = va_arg(list, char *)))
		sp = copy(cp, sp);
	va_end(list);

	return dp;
}
