* strdup.c (strdup): Tweak implementation to use memcpy.
authorRoger Sayle <roger@eyesopen.com>
Tue, 15 Apr 2003 02:11:43 +0000 (02:11 +0000)
committerRoger Sayle <sayle@gcc.gnu.org>
Tue, 15 Apr 2003 02:11:43 +0000 (02:11 +0000)
From-SVN: r65616

libiberty/ChangeLog
libiberty/strdup.c

index ec69410e2f74e9898214b6f7c1466aa1e51f5217..679b382e051fa5391146e8054457bcd072c6fa47 100644 (file)
@@ -1,3 +1,7 @@
+2003-04-14  Roger Sayle  <roger@eyesopen.com>
+
+       * strdup.c (strdup): Tweak implementation to use memcpy.
+
 2003-04-14  Kaveh R. Ghazi  <ghazi@caip.rutgers.edu>
 
        * configure.in (HAVE_UINTPTR_T): Always define.
index 49233ba7aac99603030a43264b5e7ea8b08149d3..071a4a401af754fb847734f54bc7fc60e3204744 100644 (file)
@@ -9,13 +9,24 @@ Returns a pointer to a copy of @var{s} in memory obtained from
 
 */
 
+#include <ansidecl.h>
+#ifdef ANSI_PROTOTYPES
+#include <stddef.h>
+#else
+#define size_t unsigned long
+#endif
+
+extern size_t  strlen PARAMS ((const char*));
+extern PTR     malloc PARAMS ((size_t));
+extern PTR     memcpy PARAMS ((PTR, const PTR, size_t));
+
 char *
 strdup(s)
      char *s;
 {
-    char *result = (char*)malloc(strlen(s) + 1);
-    if (result == (char*)0)
-       return (char*)0;
-    strcpy(result, s);
-    return result;
+  size_t len = strlen (s) + 1;
+  char *result = (char*) malloc (len);
+  if (result == (char*) 0)
+    return (char*) 0;
+  return (char*) memcpy (result, s, len);
 }