2009-08-17 Craig Howland <howland@LGSInnovations.com>
* libc/string/wcsncpy.c (wcsncpy):  Re-write function based on small
        version of strncpy() (fixing two bugs).
			
			
This commit is contained in:
		| @@ -1,3 +1,8 @@ | ||||
| 2009-08-17  Craig Howland <howland@LGSInnovations.com> | ||||
|  | ||||
| 	* libc/string/wcsncpy.c (wcsncpy):  Re-write function based on small | ||||
| 	version of strncpy() (fixing two bugs). | ||||
|  | ||||
| 2009-08-13  Corinna Vinschen  <corinna@vinschen.de> | ||||
|  | ||||
| 	* libc/stdio/mktemp.c (mkdtemp): Fix typo in function name. | ||||
|   | ||||
| @@ -13,11 +13,13 @@ TRAD_SYNOPSIS | ||||
| 	size_t <[n]>; | ||||
|  | ||||
| DESCRIPTION | ||||
| 	The <<wcsncpy>> function copies not more than n wide-character codes | ||||
| 	The <<wcsncpy>> function copies not more than <[n]> wide-character codes | ||||
| 	(wide-character codes that follow a null wide-character code are not | ||||
| 	copied) from the array pointed to by <[s2]> to the array pointed to | ||||
| 	by <[s1]>. If copying takes place between objects that overlap, the | ||||
| 	behaviour is undefined. | ||||
| 	behaviour is undefined.  Note that if <[s1]> contains more than <[n]> | ||||
| 	wide characters before its terminating null, the result is not | ||||
| 	null-terminated. | ||||
|  | ||||
| 	If the array pointed to by <[s2]> is a wide-character string that is | ||||
| 	shorter than <[n]> wide-character codes, null wide-character codes are | ||||
| @@ -29,41 +31,11 @@ RETURNS | ||||
| 	indicate an error.  | ||||
|  | ||||
| PORTABILITY | ||||
| <<wcsncpy>> is ISO/IEC 9899/AMD1:1995 (ISO C). | ||||
| ISO/IEC 9899; POSIX.1. | ||||
|  | ||||
| No supporting OS subroutines are required. | ||||
| */ | ||||
|  | ||||
| /*	$NetBSD: wcsncpy.c,v 1.1 2000/12/23 23:14:36 itojun Exp $	*/ | ||||
|  | ||||
| /*- | ||||
|  * Copyright (c)1999 Citrus Project, | ||||
|  * All rights reserved. | ||||
|  * | ||||
|  * Redistribution and use in source and binary forms, with or without | ||||
|  * modification, are permitted provided that the following conditions | ||||
|  * are met: | ||||
|  * 1. Redistributions of source code must retain the above copyright | ||||
|  *    notice, this list of conditions and the following disclaimer. | ||||
|  * 2. Redistributions in binary form must reproduce the above copyright | ||||
|  *    notice, this list of conditions and the following disclaimer in the | ||||
|  *    documentation and/or other materials provided with the distribution. | ||||
|  * | ||||
|  * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND | ||||
|  * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE | ||||
|  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE | ||||
|  * ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE | ||||
|  * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL | ||||
|  * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS | ||||
|  * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) | ||||
|  * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT | ||||
|  * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY | ||||
|  * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF | ||||
|  * SUCH DAMAGE. | ||||
|  * | ||||
|  *	citrus Id: wcsncpy.c,v 1.1 1999/12/29 21:47:45 tshiozak Exp | ||||
|  */ | ||||
|  | ||||
| #include <_ansi.h> | ||||
| #include <wchar.h> | ||||
|  | ||||
| @@ -73,18 +45,14 @@ _DEFUN (wcsncpy, (s1, s2, n), | ||||
| 	_CONST wchar_t * s2 _AND | ||||
| 	size_t n) | ||||
| { | ||||
|   wchar_t *p; | ||||
|   _CONST wchar_t *q; | ||||
|   wchar_t *dscan=s1; | ||||
|  | ||||
|   *s1 = '\0'; | ||||
|   p = s1; | ||||
|   q = s2; | ||||
|   while (n && *q) | ||||
|   while(n > 0) | ||||
|     { | ||||
|       *p++ = *q++; | ||||
|       n--; | ||||
|       --n; | ||||
|       if((*dscan++ = *s2++) == L'\0')  break; | ||||
|     } | ||||
|   *p = '\0'; | ||||
|   while(n-- > 0)  *dscan++ = L'\0'; | ||||
|  | ||||
|   return s1; | ||||
| } | ||||
|   | ||||
		Reference in New Issue
	
	Block a user