• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /*
2  * Copyright (C) 2003 Greg Kroah-Hartman <greg@kroah.com>
3  * Copyright (C) 2005-2006 Kay Sievers <kay.sievers@vrfy.org>
4  *
5  *	This program is free software; you can redistribute it and/or modify it
6  *	under the terms of the GNU General Public License as published by the
7  *	Free Software Foundation version 2 of the License.
8  *
9  *	This program is distributed in the hope that it will be useful, but
10  *	WITHOUT ANY WARRANTY; without even the implied warranty of
11  *	MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
12  *	General Public License for more details.
13  *
14  *	You should have received a copy of the GNU General Public License along
15  *	with this program; if not, write to the Free Software Foundation, Inc.,
16  *	51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.
17  *
18  */
19 
20 #if defined(__GLIBC__) && !(defined(__UCLIBC__) && defined(__USE_BSD))
strlcpy(char * dst,const char * src,size_t size)21 static size_t strlcpy(char *dst, const char *src, size_t size)
22 {
23 	size_t bytes = 0;
24 	char *q = dst;
25 	const char *p = src;
26 	char ch;
27 
28 	while ((ch = *p++)) {
29 		if (bytes+1 < size)
30 			*q++ = ch;
31 		bytes++;
32 	}
33 
34 	/* If size == 0 there is no space for a final null... */
35 	if (size)
36 		*q = '\0';
37 	return bytes;
38 }
39 
strlcat(char * dst,const char * src,size_t size)40 static size_t strlcat(char *dst, const char *src, size_t size)
41 {
42 	size_t bytes = 0;
43 	char *q = dst;
44 	const char *p = src;
45 	char ch;
46 
47 	while (bytes < size && *q) {
48 		q++;
49 		bytes++;
50 	}
51 	if (bytes == size)
52 		return (bytes + strlen(src));
53 
54 	while ((ch = *p++)) {
55 		if (bytes+1 < size)
56 		*q++ = ch;
57 		bytes++;
58 	}
59 
60 	*q = '\0';
61 	return bytes;
62 }
63 #endif /* __GLIBC__ */
64