/*
-NAME
+@deftypefn Extension char* concat (const char *@var{s1}, const char *@var{s2}, @dots{}, @code{NULL})
- concat -- concatenate a variable number of strings
+Concatenate zero or more of strings and return the result in freshly
+@code{xmalloc}ed memory. Returns @code{NULL} if insufficient memory is
+available. The argument list is terminated by the first @code{NULL}
+pointer encountered. Pointers to empty strings are ignored.
-SYNOPSIS
-
- #include <varargs.h>
-
- char *concat (s1, s2, s3, ..., NULL)
-
-DESCRIPTION
-
- Concatenate a variable number of strings and return the result
- in freshly malloc'd memory.
-
- Returns NULL if insufficient memory is available. The argument
- list is terminated by the first NULL pointer encountered. Pointers
- to empty strings are ignored.
+@end deftypefn
NOTES
deal with low memory situations itself, it should supply an xmalloc
that just directly invokes malloc and blindly returns whatever
malloc returns.
+
*/
# endif
# endif
+#if HAVE_STDLIB_H
+#include <stdlib.h>
+#endif
+
static inline unsigned long vconcat_length PARAMS ((const char *, va_list));
static inline unsigned long
vconcat_length (first, args)
return dst;
}
+/* @undocumented concat_length */
+
unsigned long
concat_length VPARAMS ((const char *first, ...))
{
return length;
}
+/* @undocumented concat_copy */
+
char *
concat_copy VPARAMS ((char *dst, const char *first, ...))
{
char *libiberty_concat_ptr;
+/* @undocumented concat_copy2 */
+
char *
concat_copy2 VPARAMS ((const char *first, ...))
{
return newstr;
}
+/*
+
+@deftypefn Extension char* reconcat (char *@var{optr}, const char *@var{s1}, @dots{}, @code{NULL})
+
+Same as @code{concat}, except that if @var{optr} is not @code{NULL} it
+is freed after the string is created. This is intended to be useful
+when you're extending an existing string or building up a string in a
+loop:
+
+@example
+ str = reconcat (str, "pre-", str, NULL);
+@end example
+
+@end deftypefn
+
+*/
+
char *
reconcat VPARAMS ((char *optr, const char *first, ...))
{