diff options
-rw-r--r-- | wcsmbs/Makefile | 4 | ||||
-rw-r--r-- | wcsmbs/tst-wcpncpy.c | 31 | ||||
-rw-r--r-- | wcsmbs/wcpncpy.c | 10 |
3 files changed, 37 insertions, 8 deletions
diff --git a/wcsmbs/Makefile b/wcsmbs/Makefile index 882084db1e..005c49deee 100644 --- a/wcsmbs/Makefile +++ b/wcsmbs/Makefile @@ -1,4 +1,4 @@ -# Copyright (C) 1995-2000, 2002 Free Software Foundation, Inc. +# Copyright (C) 1995-2000, 2002, 2003 Free Software Foundation, Inc. # This file is part of the GNU C Library. # The GNU C Library is free software; you can redistribute it and/or @@ -40,7 +40,7 @@ routines := wcscat wcschr wcscmp wcscpy wcscspn wcsdup wcslen wcsncat \ wcsmbsload mbsrtowcs_l tests := tst-wcstof wcsmbs-tst1 tst-wcsnlen tst-btowc tst-mbrtowc \ - tst-wcrtomb + tst-wcrtomb tst-wcpncpy include ../Rules diff --git a/wcsmbs/tst-wcpncpy.c b/wcsmbs/tst-wcpncpy.c new file mode 100644 index 0000000000..ce8ea31bf7 --- /dev/null +++ b/wcsmbs/tst-wcpncpy.c @@ -0,0 +1,31 @@ +/* Copyright (C) 2003 Free Software Foundation, Inc. + This file is part of the GNU C Library. + Contributed by Ulrich Drepper <drepper@cygnus.com>, 2003. + + The GNU C Library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + The GNU C Library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with the GNU C Library; if not, write to the Free + Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA + 02111-1307 USA. */ + +#include <wchar.h> + + +int +main (void) +{ + const wchar_t src[] = L"0"; + wchar_t dest[10]; + wmemset (dest, L'\0', 10); + wcpncpy (dest, src, 2); + return wcscmp (dest, src) != 0; +} diff --git a/wcsmbs/wcpncpy.c b/wcsmbs/wcpncpy.c index df7efd7fb0..bd62e62682 100644 --- a/wcsmbs/wcpncpy.c +++ b/wcsmbs/wcpncpy.c @@ -31,8 +31,6 @@ __wcpncpy (dest, src, n) wint_t c; wchar_t *const s = dest; - --dest; - if (n >= 4) { size_t n4 = n >> 2; @@ -40,19 +38,19 @@ __wcpncpy (dest, src, n) for (;;) { c = *src++; - *++dest = c; + *dest++ = c; if (c == L'\0') break; c = *src++; - *++dest = c; + *dest++ = c; if (c == L'\0') break; c = *src++; - *++dest = c; + *dest++ = c; if (c == L'\0') break; c = *src++; - *++dest = c; + *dest++ = c; if (c == L'\0') break; if (--n4 == 0) |