| /* |
| * 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__ */ |