X-Git-Url: http://drtracing.org/?a=blobdiff_plain;f=libiberty%2Fconcat.c;h=9779d5663b66c0798acae2fd956e08a143032d4b;hb=956a8f8beb7b830faf126c48025f44628a365a14;hp=fbbf2ee41a978c4d7c54fdffb6bb00532e4cd4f4;hpb=916aaa1251eb953dc9ad6b5a9d1176f6eeae444e;p=deliverable%2Fbinutils-gdb.git diff --git a/libiberty/concat.c b/libiberty/concat.c index fbbf2ee41a..9779d5663b 100644 --- a/libiberty/concat.c +++ b/libiberty/concat.c @@ -1,5 +1,5 @@ /* Concatenate variable number of strings. - Copyright (C) 1991, 1994, 2001 Free Software Foundation, Inc. + Copyright (C) 1991, 1994, 2001, 2011 Free Software Foundation, Inc. Written by Fred Fish @ Cygnus Support This file is part of the libiberty library. @@ -15,30 +15,21 @@ Library General Public License for more details. You should have received a copy of the GNU Library General Public License along with libiberty; see the file COPYING.LIB. If -not, write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330, -Boston, MA 02111-1307, USA. */ +not, write to the Free Software Foundation, Inc., 51 Franklin Street - Fifth Floor, +Boston, MA 02110-1301, 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 +41,7 @@ NOTES deal with low memory situations itself, it should supply an xmalloc that just directly invokes malloc and blindly returns whatever malloc returns. + */ @@ -60,11 +52,7 @@ NOTES #include "libiberty.h" #include /* size_t */ -#ifdef ANSI_PROTOTYPES #include -#else -#include -#endif # if HAVE_STRING_H # include @@ -78,11 +66,9 @@ NOTES #include #endif -static inline unsigned long vconcat_length PARAMS ((const char *, va_list)); +static inline unsigned long vconcat_length (const char *, va_list); static inline unsigned long -vconcat_length (first, args) - const char *first; - va_list args; +vconcat_length (const char *first, va_list args) { unsigned long length = 0; const char *arg; @@ -93,12 +79,8 @@ vconcat_length (first, args) return length; } -static inline char *vconcat_copy PARAMS ((char *, const char *, va_list)); static inline char * -vconcat_copy (dst, first, args) - char *dst; - const char *first; - va_list args; +vconcat_copy (char *dst, const char *first, va_list args) { char *end = dst; const char *arg; @@ -114,8 +96,10 @@ vconcat_copy (dst, first, args) return dst; } +/* @undocumented concat_length */ + unsigned long -concat_length VPARAMS ((const char *first, ...)) +concat_length (const char *first, ...) { unsigned long length; @@ -127,8 +111,10 @@ concat_length VPARAMS ((const char *first, ...)) return length; } +/* @undocumented concat_copy */ + char * -concat_copy VPARAMS ((char *dst, const char *first, ...)) +concat_copy (char *dst, const char *first, ...) { char *save_dst; @@ -142,10 +128,18 @@ concat_copy VPARAMS ((char *dst, const char *first, ...)) return save_dst; } +#ifdef __cplusplus +extern "C" { +#endif /* __cplusplus */ char *libiberty_concat_ptr; +#ifdef __cplusplus +} +#endif /* __cplusplus */ + +/* @undocumented concat_copy2 */ char * -concat_copy2 VPARAMS ((const char *first, ...)) +concat_copy2 (const char *first, ...) { VA_OPEN (args, first); VA_FIXEDARG (args, const char *, first); @@ -156,14 +150,14 @@ concat_copy2 VPARAMS ((const char *first, ...)) } char * -concat VPARAMS ((const char *first, ...)) +concat (const char *first, ...) { char *newstr; /* First compute the size of the result and get sufficient memory. */ VA_OPEN (args, first); VA_FIXEDARG (args, const char *, first); - newstr = (char *) xmalloc (vconcat_length (first, args) + 1); + newstr = XNEWVEC (char, vconcat_length (first, args) + 1); VA_CLOSE (args); /* Now copy the individual pieces to the result string. */ @@ -175,8 +169,26 @@ 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, ...)) +reconcat (char *optr, const char *first, ...) { char *newstr; @@ -184,7 +196,7 @@ reconcat VPARAMS ((char *optr, const char *first, ...)) VA_OPEN (args, first); VA_FIXEDARG (args, char *, optr); VA_FIXEDARG (args, const char *, first); - newstr = (char *) xmalloc (vconcat_length (first, args) + 1); + newstr = XNEWVEC (char, vconcat_length (first, args) + 1); VA_CLOSE (args); /* Now copy the individual pieces to the result string. */ @@ -207,7 +219,7 @@ reconcat VPARAMS ((char *optr, const char *first, ...)) #include int -main () +main (void) { printf ("\"\" = \"%s\"\n", concat (NULLP)); printf ("\"a\" = \"%s\"\n", concat ("a", NULLP));