X-Git-Url: http://drtracing.org/?a=blobdiff_plain;f=libiberty%2Fconcat.c;h=98b20e16a11a49174717e9e8d88c035a42c54c97;hb=610ad19b95f405554f34d1048a1ce334f6d3e33f;hp=136e8be866ebee04f7cf2e0536708d332b910778;hpb=99ee3a8f13fc032cce1b964cdbc37a567a944428;p=deliverable%2Fbinutils-gdb.git diff --git a/libiberty/concat.c b/libiberty/concat.c index 136e8be866..98b20e16a1 100644 --- a/libiberty/concat.c +++ b/libiberty/concat.c @@ -21,24 +21,14 @@ Boston, MA 02111-1307, USA. */ /* -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 - - 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 @@ -50,6 +40,7 @@ NOTES deal with low memory situations itself, it should supply an xmalloc that just directly invokes malloc and blindly returns whatever malloc returns. + */ @@ -74,6 +65,10 @@ NOTES # endif # endif +#if HAVE_STDLIB_H +#include +#endif + static inline unsigned long vconcat_length PARAMS ((const char *, va_list)); static inline unsigned long vconcat_length (first, args) @@ -110,6 +105,8 @@ vconcat_copy (dst, first, args) return dst; } +/* @undocumented concat_length */ + unsigned long concat_length VPARAMS ((const char *first, ...)) { @@ -123,6 +120,8 @@ concat_length VPARAMS ((const char *first, ...)) return length; } +/* @undocumented concat_copy */ + char * concat_copy VPARAMS ((char *dst, const char *first, ...)) { @@ -140,6 +139,8 @@ concat_copy VPARAMS ((char *dst, const char *first, ...)) char *libiberty_concat_ptr; +/* @undocumented concat_copy2 */ + char * concat_copy2 VPARAMS ((const char *first, ...)) { @@ -171,6 +172,23 @@ concat 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, ...)) { @@ -188,10 +206,9 @@ reconcat VPARAMS ((char *optr, const char *first, ...)) VA_FIXEDARG (args, char *, optr); VA_FIXEDARG (args, const char *, first); vconcat_copy (newstr, first, args); - VA_CLOSE (args); - - if (optr) + if (optr) /* Done before VA_CLOSE so optr stays in scope for K&R C. */ free (optr); + VA_CLOSE (args); return newstr; }