OSDN Git Service

Make strdup() use memcpy() rather than strcpy() to duplicate the string.
authorPeter Kjellerstedt <peter.kjellerstedt@axis.com>
Thu, 19 Oct 2006 10:17:12 +0000 (10:17 -0000)
committerPeter Kjellerstedt <peter.kjellerstedt@axis.com>
Thu, 19 Oct 2006 10:17:12 +0000 (10:17 -0000)
The rationale is that we already have the length of the string to
duplicate (from doing the malloc()), and memcpy() should then always be
faster than strcpy() (or at least as fast).

libc/string/strdup.c

index dff5af6..d15345d 100644 (file)
 
 #ifdef WANT_WIDE
 libc_hidden_proto(wcslen)
-libc_hidden_proto(wcscpy)
 # define Wstrdup wcsdup
 # define Wstrlen wcslen
-# define Wstrcpy wcscpy
 #else
 libc_hidden_proto(strdup)
 libc_hidden_proto(strlen)
-libc_hidden_proto(strcpy)
 # define Wstrdup strdup
 # define Wstrlen strlen
-# define Wstrcpy strcpy
 #endif
+libc_hidden_proto(memcpy)
 
 Wchar *Wstrdup(register const Wchar *s1)
 {
        register Wchar *s;
+       register size_t l = (Wstrlen(s1) + 1) * sizeof(Wchar);
 
-    if ((s = malloc((Wstrlen(s1) + 1) * sizeof(Wchar))) != NULL) {
-               Wstrcpy(s, s1);
+       if ((s = malloc(l)) != NULL) {
+               memcpy(s, s1, l);
        }
 
        return s;