This patch rewrites wcscpy using wcslen and wmemcpy. This is similar
to the optimization done on strcpy by
b863d2bc4d.
Checked on x86_64-linux-gnu.
* wcsmbs/wcscpy.c (__wcpcpy): Rewrite using wcslen and wmemcpy.
2019-02-27 Adhemerval Zanella <adhemerval.zanella@linaro.org>
+ * wcsmbs/wcscpy.c (__wcpcpy): Rewrite using wcslen and wmemcpy.
+
* include/wchar.h (__wcscpy): New prototype.
* sysdeps/powerpc/powerpc32/power4/multiarch/wcscpy-ppc32.c
(__wcscpy): Route internal symbol to generic implementation.
License along with the GNU C Library; if not, see
<http://www.gnu.org/licenses/>. */
-#include <stddef.h>
#include <wchar.h>
wchar_t *
__wcscpy (wchar_t *dest, const wchar_t *src)
{
- wint_t c;
- wchar_t *wcp;
-
- if (__alignof__ (wchar_t) >= sizeof (wchar_t))
- {
- const ptrdiff_t off = dest - src - 1;
-
- wcp = (wchar_t *) src;
-
- do
- {
- c = *wcp++;
- wcp[off] = c;
- }
- while (c != L'\0');
- }
- else
- {
- wcp = dest;
-
- do
- {
- c = *src++;
- *wcp++ = c;
- }
- while (c != L'\0');
- }
-
- return dest;
+ return __wmemcpy (dest, src, __wcslen (src) + 1);
}
#ifndef WCSCPY
weak_alias (__wcscpy, wcscpy)