summaryrefslogtreecommitdiff
path: root/libiberty/concat.c
diff options
context:
space:
mode:
authorRichard Henderson <rth@redhat.com>2001-06-10 11:57:15 -0700
committerRichard Henderson <rth@gcc.gnu.org>2001-06-10 11:57:15 -0700
commit0bdcca681d9bb477bf1288a1d0a9d06b2af02952 (patch)
tree27b7713c8516cba28a54a5888c305e0de97e25fc /libiberty/concat.c
parent33a1b84b69a52dba5cfce24f2c09251c97852d74 (diff)
concat.c: Include string.h.
* concat.c: Include string.h. Fix int vs size_t usage. Simplify the iteration loops. Use memcpy. From-SVN: r43149
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. */