summaryrefslogtreecommitdiff
path: root/libiberty/concat.c
diff options
context:
space:
mode:
authorDJ Delorie <dj@delorie.com>2001-06-11 00:07:54 +0000
committerDJ Delorie <dj@delorie.com>2001-06-11 00:07:54 +0000
commitdb2456e67c5c770a8c019a2e7adf15212ba98be7 (patch)
tree4b74fc8449331015aa4cad8f0ae0add82bb575d7 /libiberty/concat.c
parentdb32bc83b17fc400218b1f20a05673fd672b8671 (diff)
downloadgdb-db2456e67c5c770a8c019a2e7adf15212ba98be7.tar.gz
merge from gcc
Diffstat (limited to 'libiberty/concat.c')
-rw-r--r--libiberty/concat.c78
1 files changed, 30 insertions, 48 deletions
diff --git a/libiberty/concat.c b/libiberty/concat.c
index 5b132c85764..8e6838f1cd8 100644
--- a/libiberty/concat.c
+++ b/libiberty/concat.c
@@ -1,5 +1,5 @@
/* Concatenate variable number of strings.
- Copyright (C) 1991, 1994 Free Software Foundation, Inc.
+ Copyright (C) 1991, 1994, 2001 Free Software Foundation, Inc.
Written by Fred Fish @ Cygnus Support
This file is part of the libiberty library.
@@ -62,14 +62,13 @@ NOTES
#include <varargs.h>
#endif
-#ifdef __STDC__
-#include <stddef.h>
-extern size_t strlen (const char *s);
-#else
-extern int strlen ();
-#endif
-
-#define NULLP (char *)0
+# if HAVE_STRING_H
+# include <string.h>
+# else
+# if HAVE_STRINGS_H
+# include <strings.h>
+# endif
+# endif
/* VARARGS */
#ifdef ANSI_PROTOTYPES
@@ -81,7 +80,7 @@ concat (va_alist)
va_dcl
#endif
{
- register int length;
+ register size_t length;
register char *newstr;
register char *end;
register const char *arg;
@@ -90,8 +89,7 @@ concat (va_alist)
const char *first;
#endif
- /* First compute the size of the result and get sufficient memory. */
-
+ /* First compute the size of the result and get sufficient memory. */
#ifdef ANSI_PROTOTYPES
va_start (args, first);
#else
@@ -99,53 +97,37 @@ concat (va_alist)
first = va_arg (args, const char *);
#endif
- if (first == NULLP)
- length = 0;
- else
- {
- length = strlen (first);
- while ((arg = va_arg (args, const char *)) != NULLP)
- {
- length += strlen (arg);
- }
- }
- newstr = (char *) xmalloc (length + 1);
+ length = 0;
+ for (arg = first; arg ; arg = va_arg (args, const char *))
+ length += strlen (arg);
+
va_end (args);
- /* Now copy the individual pieces to the result string. */
+ newstr = (char *) xmalloc (length + 1);
- if (newstr != NULLP)
- {
+ /* Now copy the individual pieces to the result string. */
#ifdef ANSI_PROTOTYPES
- va_start (args, first);
+ va_start (args, first);
#else
- va_start (args);
- first = va_arg (args, const char *);
+ va_start (args);
+ first = va_arg (args, const char *);
#endif
- end = newstr;
- if (first != NULLP)
- {
- arg = first;
- while (*arg)
- {
- *end++ = *arg++;
- }
- while ((arg = va_arg (args, const char *)) != NULLP)
- {
- while (*arg)
- {
- *end++ = *arg++;
- }
- }
- }
- *end = '\000';
- va_end (args);
+
+ end = newstr;
+ for (arg = first; arg ; arg = va_arg (args, const char *))
+ {
+ length = strlen (arg);
+ memcpy (end, arg, length);
+ end += length;
}
+ *end = '\000';
+ va_end (args);
- return (newstr);
+ return newstr;
}
#ifdef MAIN
+#define NULLP (char *)0
/* Simple little test driver. */