xref: /haiku/src/system/libroot/posix/wchar/wcslcat.c (revision 68ea01249e1e2088933cb12f9c28d4e5c5d1c9ef)
1 /*
2 ** Copyright 2002, Manuel J. Petit.
3 ** Copyright 2011, Oliver Tappe <zooey@hirschkafer.de>.
4 ** All rights reserved. Distributed under the terms of the NewOS License.
5 */
6 
7 #include <wchar_private.h>
8 
9 
10 /** Concatenates the source string to the destination, writes
11  *	as much as "maxLength" bytes to the dest string.
12  *	Always null terminates the string as long as maxLength is
13  *	larger than the dest string.
14  *	Returns the length of the string that it tried to create
15  *	to be able to easily detect string truncation.
16  */
17 
18 size_t
19 __wcslcat(wchar_t* dest, const wchar_t* source, size_t maxLength)
20 {
21 	size_t destLength = __wcsnlen(dest, maxLength);
22 	size_t i;
23 
24 	if (destLength == maxLength) {
25 		// the destination is already full
26 		return destLength + __wcslen(source);
27 	}
28 
29 	dest += destLength;
30 	maxLength -= destLength;
31 
32 	for (i = 0; i < maxLength - 1 && *source != L'\0'; ++i)
33 		*dest++ = *source++;
34 
35 	*dest = '\0';
36 
37 	return destLength + i + __wcslen(source);
38 }
39 
40 
41 B_DEFINE_WEAK_ALIAS(__wcslcat, wcslcat);
42