|  | /* | 
|  | * Copyright (C) 2003 Greg Kroah-Hartman <greg@kroah.com> | 
|  | * Copyright (C) 2005-2006 Kay Sievers <kay.sievers@vrfy.org> | 
|  | * | 
|  | *	This program is free software; you can redistribute it and/or modify it | 
|  | *	under the terms of the GNU General Public License as published by the | 
|  | *	Free Software Foundation version 2 of the License. | 
|  | * | 
|  | *	This program 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 | 
|  | *	General Public License for more details. | 
|  | * | 
|  | *	You should have received a copy of the GNU General Public License along | 
|  | *	with this program; if not, write to the Free Software Foundation, Inc., | 
|  | *	51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA. | 
|  | * | 
|  | */ | 
|  |  | 
|  | #if defined(__GLIBC__) && !(defined(__UCLIBC__) && defined(__USE_BSD)) | 
|  | static size_t strlcpy(char *dst, const char *src, size_t size) | 
|  | { | 
|  | size_t bytes = 0; | 
|  | char *q = dst; | 
|  | const char *p = src; | 
|  | char ch; | 
|  |  | 
|  | while ((ch = *p++)) { | 
|  | if (bytes+1 < size) | 
|  | *q++ = ch; | 
|  | bytes++; | 
|  | } | 
|  |  | 
|  | /* If size == 0 there is no space for a final null... */ | 
|  | if (size) | 
|  | *q = '\0'; | 
|  | return bytes; | 
|  | } | 
|  |  | 
|  | static size_t strlcat(char *dst, const char *src, size_t size) | 
|  | { | 
|  | size_t bytes = 0; | 
|  | char *q = dst; | 
|  | const char *p = src; | 
|  | char ch; | 
|  |  | 
|  | while (bytes < size && *q) { | 
|  | q++; | 
|  | bytes++; | 
|  | } | 
|  | if (bytes == size) | 
|  | return (bytes + strlen(src)); | 
|  |  | 
|  | while ((ch = *p++)) { | 
|  | if (bytes+1 < size) | 
|  | *q++ = ch; | 
|  | bytes++; | 
|  | } | 
|  |  | 
|  | *q = '\0'; | 
|  | return bytes; | 
|  | } | 
|  | #endif /* __GLIBC__ */ |