X-Git-Url: http://git.efficios.com/?a=blobdiff_plain;f=libiberty%2Fconcat.c;h=8eb478b47bcf7ae4fe1d904c862c3c35220b634a;hb=71780f455fbf35ed4c48e94b4228c55c11a213c8;hp=a7e642880fa20d88535b25df0ae68dffb292b5ad;hpb=ba19b94f67aeec0722939ce17b4067c8fd05f4cc;p=deliverable%2Fbinutils-gdb.git diff --git a/libiberty/concat.c b/libiberty/concat.c index a7e642880f..8eb478b47b 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-2019 Free Software Foundation, Inc. Written by Fred Fish @ Cygnus Support This file is part of the libiberty library. @@ -15,32 +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. */ /* -@deftypefn Extension char* concat (char *@var{s1}, char *@var{s2}, ..., @code{NULL}) +@deftypefn Extension char* concat (const char *@var{s1}, const char *@var{s2}, @ + @dots{}, @code{NULL}) Concatenate zero or more of strings and return the result in freshly -xmalloc'd 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. +@code{xmalloc}ed memory. The argument list is terminated by the first +@code{NULL} pointer encountered. Pointers to empty strings are ignored. @end deftypefn -NOTES - - This function uses xmalloc() which is expected to be a front end - function to malloc() that deals with low memory situations. In - typical use, if malloc() returns NULL then xmalloc() diverts to an - error handler routine which never returns, and thus xmalloc will - never return a NULL pointer. If the client application wishes to - deal with low memory situations itself, it should supply an xmalloc - that just directly invokes malloc and blindly returns whatever - malloc returns. - */ @@ -51,11 +40,7 @@ NOTES #include "libiberty.h" #include /* size_t */ -#ifdef ANSI_PROTOTYPES #include -#else -#include -#endif # if HAVE_STRING_H # include @@ -69,11 +54,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; @@ -84,12 +67,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; @@ -108,14 +87,14 @@ vconcat_copy (dst, first, args) /* @undocumented concat_length */ unsigned long -concat_length VPARAMS ((const char *first, ...)) +concat_length (const char *first, ...) { unsigned long length; + va_list args; - VA_OPEN (args, first); - VA_FIXEDARG (args, const char *, first); + va_start (args, first); length = vconcat_length (first, args); - VA_CLOSE (args); + va_end (args); return length; } @@ -123,58 +102,63 @@ concat_length VPARAMS ((const char *first, ...)) /* @undocumented concat_copy */ char * -concat_copy VPARAMS ((char *dst, const char *first, ...)) +concat_copy (char *dst, const char *first, ...) { char *save_dst; + va_list args; - VA_OPEN (args, first); - VA_FIXEDARG (args, char *, dst); - VA_FIXEDARG (args, const char *, first); + va_start (args, first); vconcat_copy (dst, first, args); save_dst = dst; /* With K&R C, dst goes out of scope here. */ - VA_CLOSE (args); + va_end (args); 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); + va_list args; + va_start (args, first); vconcat_copy (libiberty_concat_ptr, first, args); - VA_CLOSE (args); + va_end (args); return libiberty_concat_ptr; } char * -concat VPARAMS ((const char *first, ...)) +concat (const char *first, ...) { char *newstr; + va_list args; /* 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); - VA_CLOSE (args); + va_start (args, first); + newstr = XNEWVEC (char, vconcat_length (first, args) + 1); + va_end (args); /* Now copy the individual pieces to the result string. */ - VA_OPEN (args, first); - VA_FIXEDARG (args, const char *, first); + va_start (args, first); vconcat_copy (newstr, first, args); - VA_CLOSE (args); + va_end (args); return newstr; } /* -@deftypefn Extension char* reconcat (char *@var{optr}, char *@var{s1}, ..., @code{NULL}) +@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 @@ -190,25 +174,22 @@ loop: */ char * -reconcat VPARAMS ((char *optr, const char *first, ...)) +reconcat (char *optr, const char *first, ...) { char *newstr; + va_list args; /* First compute the size of the result and get sufficient memory. */ - VA_OPEN (args, first); - VA_FIXEDARG (args, char *, optr); - VA_FIXEDARG (args, const char *, first); - newstr = (char *) xmalloc (vconcat_length (first, args) + 1); - VA_CLOSE (args); + va_start (args, first); + newstr = XNEWVEC (char, vconcat_length (first, args) + 1); + va_end (args); /* Now copy the individual pieces to the result string. */ - VA_OPEN (args, first); - VA_FIXEDARG (args, char *, optr); - VA_FIXEDARG (args, const char *, first); + va_start (args, first); vconcat_copy (newstr, first, args); if (optr) /* Done before VA_CLOSE so optr stays in scope for K&R C. */ free (optr); - VA_CLOSE (args); + va_end (args); return newstr; } @@ -221,7 +202,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));