about summary refs log tree commit diff
path: root/wcsmbs/wcscpy.c
diff options
context:
space:
mode:
authorUlrich Drepper <drepper@redhat.com>2003-02-01 20:53:16 +0000
committerUlrich Drepper <drepper@redhat.com>2003-02-01 20:53:16 +0000
commit38e68573bc08179bb9418038e7c2db7e576eaea5 (patch)
treefac3119a1783cc465b6ff578da410897c4163c00 /wcsmbs/wcscpy.c
parent4a7d6545ce1611c0a320f3210d46d5bd3a03b260 (diff)
downloadglibc-38e68573bc08179bb9418038e7c2db7e576eaea5.tar.gz
glibc-38e68573bc08179bb9418038e7c2db7e576eaea5.tar.xz
glibc-38e68573bc08179bb9418038e7c2db7e576eaea5.zip
Update.
2003-02-01  Ulrich Drepper  <drepper@redhat.com>

	* time/tzfile.c (__tzfile_compute): Change return value type to
	void.  Adjust return statements.
	* include/time.h (__tzfile_compute): Adjust prototype.

2003-02-01  Jim Meyering  <jim@meyering.net>

	* time/tzset.c (__tz_convert): Remove dead code; __tzfile_compute
	always returns 1.

2003-01-31  Steven Munroe  <sjmunroe@us.ibm.com>

	* sysdeps/unix/sysv/linux/powerpc/powerpc64/fe_nomask.c
	[!__ASSUME_NEW_PRCTL_SYSCALL]: Noop prctl syscall and set ENOSYS.

2003-01-31  Steven Munroe  <sjmunroe@us.ibm.com>

	* sysdeps/unix/sysv/linux/powerpc/powerpc64/getcontext.S
	[!__ASSUME_NEW_RT_SIGRETURN_SYSCALL]: Generate ENOSYS stub.
	* sysdeps/unix/sysv/linux/powerpc/powerpc64/makecontext.S
	[!__ASSUME_NEW_RT_SIGRETURN_SYSCALL]: Likewise.
	* sysdeps/unix/sysv/linux/powerpc/powerpc64/setcontext.S
	[!__ASSUME_NEW_RT_SIGRETURN_SYSCALL]: Likewise.
	* sysdeps/unix/sysv/linux/powerpc/powerpc64/swapcontext.S
	[!__ASSUME_NEW_RT_SIGRETURN_SYSCALL]: Likewise.

2003-01-31  Steven Munroe  <sjmunroe@us.ibm.com>

	* sysdeps/unix/sysv/linux/configure.in: Change arch_minimum_kernel
	back to 2.4.19 for powerpc64.
	* sysdeps/unix/sysv/linux/kernel-features.h
	(__ASSUME_NEW_PRCTL_SYSCALL): Define for powerpc64.
	(__ASSUME_NEW_RT_SIGRETURN_SYSCALL): Define for powerpc64.

2003-02-01  Ulrich Drepper  <drepper@redhat.com>

	* wcsmbs/wcscpy.c (wcscpy): Add alternative implementation for
	platforms with strange alignment requirements on wchar_t.
Diffstat (limited to 'wcsmbs/wcscpy.c')
-rw-r--r--wcsmbs/wcscpy.c35
1 files changed, 25 insertions, 10 deletions
diff --git a/wcsmbs/wcscpy.c b/wcsmbs/wcscpy.c
index aeb8abb162..2e52a6c46f 100644
--- a/wcsmbs/wcscpy.c
+++ b/wcsmbs/wcscpy.c
@@ -1,4 +1,4 @@
-/* Copyright (C) 1995, 1996, 1997 Free Software Foundation, Inc.
+/* Copyright (C) 1995, 1996, 1997, 2003 Free Software Foundation, Inc.
    This file is part of the GNU C Library.
    Contributed by Ulrich Drepper <drepper@gnu.ai.mit.edu>, 1995.
 
@@ -17,10 +17,8 @@
    Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
    02111-1307 USA.  */
 
-#include <wchar.h>
-
-#define __need_ptrdiff_t
 #include <stddef.h>
+#include <wchar.h>
 
 
 /* Copy SRC to DEST.  */
@@ -29,16 +27,33 @@ wcscpy (dest, src)
      wchar_t *dest;
      const wchar_t *src;
 {
-  wchar_t *wcp = (wchar_t *) src;
   wint_t c;
-  const ptrdiff_t off = dest - src - 1;
+  wchar_t *wcp;
 
-  do
+  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
     {
-      c = *wcp++;
-      wcp[off] = c;
+      wcp = dest;
+
+      do
+	{
+	  c = *src++;
+	  *wcp++ = c;
+	}
+      while (c != L'\0');
     }
-  while (c != L'\0');
 
   return dest;
 }