* strlcat.c: Add file.
* strlcpy.c: Add file.
This commit is contained in:
		
							
								
								
									
										74
									
								
								newlib/libc/string/strlcat.c
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										74
									
								
								newlib/libc/string/strlcat.c
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,74 @@ | |||||||
|  | /*      $OpenBSD: strlcat.c,v 1.8 2001/05/13 15:40:15 deraadt Exp $        */ | ||||||
|  |  | ||||||
|  | /* | ||||||
|  |  * Copyright (c) 1998 Todd C. Miller <Todd.Miller@courtesan.com> | ||||||
|  |  * 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. | ||||||
|  |  * 3. The name of the author may not be used to endorse or promote products | ||||||
|  |  *    derived from this software without specific prior written permission. | ||||||
|  |  * | ||||||
|  |  * THIS SOFTWARE IS PROVIDED ``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 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. | ||||||
|  |  */ | ||||||
|  |  | ||||||
|  | #if defined(LIBC_SCCS) && !defined(lint) | ||||||
|  | static char *rcsid = "$OpenBSD: strlcat.c,v 1.8 2001/05/13 15:40:15 deraadt Exp $"; | ||||||
|  | #endif /* LIBC_SCCS and not lint */ | ||||||
|  |  | ||||||
|  | #include <sys/types.h> | ||||||
|  | #include <string.h> | ||||||
|  |  | ||||||
|  | /* | ||||||
|  |  * Appends src to string dst of size siz (unlike strncat, siz is the | ||||||
|  |  * full size of dst, not space left).  At most siz-1 characters | ||||||
|  |  * will be copied.  Always NUL terminates (unless siz <= strlen(dst)). | ||||||
|  |  * Returns strlen(src) + MIN(siz, strlen(initial dst)). | ||||||
|  |  * If retval >= siz, truncation occurred. | ||||||
|  |  */ | ||||||
|  | size_t | ||||||
|  | _DEFUN (strlcat, (dst, src, siz), | ||||||
|  | 	char *dst _AND | ||||||
|  | 	_CONST char *src _AND | ||||||
|  | 	size_t siz) | ||||||
|  | { | ||||||
|  |         register char *d = dst; | ||||||
|  |         register const char *s = src; | ||||||
|  |         register size_t n = siz; | ||||||
|  |         size_t dlen; | ||||||
|  |  | ||||||
|  |         /* Find the end of dst and adjust bytes left but don't go past end */ | ||||||
|  |         while (n-- != 0 && *d != '\0') | ||||||
|  |                 d++; | ||||||
|  |         dlen = d - dst; | ||||||
|  |         n = siz - dlen; | ||||||
|  |  | ||||||
|  |         if (n == 0) | ||||||
|  |                 return(dlen + strlen(s)); | ||||||
|  |         while (*s != '\0') { | ||||||
|  |                 if (n != 1) { | ||||||
|  |                         *d++ = *s; | ||||||
|  |                         n--; | ||||||
|  |                 } | ||||||
|  |                 s++; | ||||||
|  |         } | ||||||
|  |         *d = '\0'; | ||||||
|  |  | ||||||
|  |         return(dlen + (s - src));        /* count does not include NUL */ | ||||||
|  | } | ||||||
|  |  | ||||||
							
								
								
									
										70
									
								
								newlib/libc/string/strlcpy.c
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										70
									
								
								newlib/libc/string/strlcpy.c
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,70 @@ | |||||||
|  | /*      $OpenBSD: strlcpy.c,v 1.5 2001/05/13 15:40:16 deraadt Exp $        */ | ||||||
|  |  | ||||||
|  | /* | ||||||
|  |  * Copyright (c) 1998 Todd C. Miller <Todd.Miller@courtesan.com> | ||||||
|  |  * 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. | ||||||
|  |  * 3. The name of the author may not be used to endorse or promote products | ||||||
|  |  *    derived from this software without specific prior written permission. | ||||||
|  |  * | ||||||
|  |  * THIS SOFTWARE IS PROVIDED ``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 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. | ||||||
|  |  */ | ||||||
|  |  | ||||||
|  | #if defined(LIBC_SCCS) && !defined(lint) | ||||||
|  | static char *rcsid = "$OpenBSD: strlcpy.c,v 1.5 2001/05/13 15:40:16 deraadt Exp $"; | ||||||
|  | #endif /* LIBC_SCCS and not lint */ | ||||||
|  |  | ||||||
|  | #include <sys/types.h> | ||||||
|  | #include <string.h> | ||||||
|  |  | ||||||
|  | /* | ||||||
|  |  * Copy src to string dst of size siz.  At most siz-1 characters | ||||||
|  |  * will be copied.  Always NUL terminates (unless siz == 0). | ||||||
|  |  * Returns strlen(src); if retval >= siz, truncation occurred. | ||||||
|  |  */ | ||||||
|  | size_t | ||||||
|  | _DEFUN (strlcpy, (dst, src, siz), | ||||||
|  | 	char *dst _AND | ||||||
|  | 	_CONST char *src _AND | ||||||
|  | 	size_t siz) | ||||||
|  | { | ||||||
|  |         register char *d = dst; | ||||||
|  |         register const char *s = src; | ||||||
|  |         register size_t n = siz; | ||||||
|  |  | ||||||
|  |         /* Copy as many bytes as will fit */ | ||||||
|  |         if (n != 0 && --n != 0) { | ||||||
|  |                 do { | ||||||
|  |                         if ((*d++ = *s++) == 0) | ||||||
|  |                                 break; | ||||||
|  |                 } while (--n != 0); | ||||||
|  |         } | ||||||
|  |  | ||||||
|  |         /* Not enough room in dst, add NUL and traverse rest of src */ | ||||||
|  |         if (n == 0) { | ||||||
|  |                 if (siz != 0) | ||||||
|  |                         *d = '\0';                /* NUL-terminate dst */ | ||||||
|  |                 while (*s++) | ||||||
|  |                         ; | ||||||
|  |         } | ||||||
|  |  | ||||||
|  |         return(s - src - 1);        /* count does not include NUL */ | ||||||
|  | } | ||||||
|  |  | ||||||
		Reference in New Issue
	
	Block a user