xref: /haiku/src/system/libroot/posix/wchar/wcsncasecmp.c (revision 7b3e89c0944ae1efa9a8fc66c7303874b7a344b2)
1 /*
2 ** Copyright 2011, Oliver Tappe, zooey@hirschkaefer.de. All rights reserved.
3 ** Distributed under the terms of the MIT License.
4 */
5 
6 #include <wctype.h>
7 
8 #include <wchar_private.h>
9 
10 
11 int
12 __wcsncasecmp(const wchar_t* wcs1, const wchar_t* wcs2, size_t count)
13 {
14 	int cmp = 0;
15 
16 	while (count-- > 0) {
17 		cmp = towlower(*wcs1) - towlower(*wcs2++);
18 			/* note: won't overflow, since our wchar_t is guaranteed to never
19 			   have the highest bit set */
20 
21 		if (cmp != 0 || *wcs1++ == L'\0')
22 			break;
23 	}
24 
25 	return cmp;
26 }
27 
28 
29 B_DEFINE_WEAK_ALIAS(__wcsncasecmp, wcsncasecmp);
30 
31 
32 int
33 __wcsncasecmp_l(const wchar_t* wcs1, const wchar_t* wcs2, size_t count, locale_t locale)
34 {
35 	int cmp = 0;
36 
37 	while (count-- > 0) {
38 		cmp = towlower_l(*wcs1, locale) - towlower_l(*wcs2++, locale);
39 			/* note: won't overflow, since our wchar_t is guaranteed to never
40 			   have the highest bit set */
41 
42 		if (cmp != 0 || *wcs1++ == L'\0')
43 			break;
44 	}
45 
46 	return cmp;
47 }
48 
49 
50 B_DEFINE_WEAK_ALIAS(__wcsncasecmp_l, wcsncasecmp_l);
51