]> git.ipfire.org Git - thirdparty/glibc.git/blame - wcsmbs/wcsncmp.c
Update copyright notices with scripts/update-copyrights
[thirdparty/glibc.git] / wcsmbs / wcsncmp.c
CommitLineData
d4697bc9 1/* Copyright (C) 1995-2014 Free Software Foundation, Inc.
6d52618b
UD
2 This file is part of the GNU C Library.
3 Contributed by Ulrich Drepper <drepper@gnu.ai.mit.edu>, 1995.
a482b5a5 4
6d52618b 5 The GNU C Library is free software; you can redistribute it and/or
41bdb6e2
AJ
6 modify it under the terms of the GNU Lesser General Public
7 License as published by the Free Software Foundation; either
8 version 2.1 of the License, or (at your option) any later version.
a482b5a5 9
6d52618b
UD
10 The GNU C Library is distributed in the hope that it will be useful,
11 but WITHOUT ANY WARRANTY; without even the implied warranty of
12 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
41bdb6e2 13 Lesser General Public License for more details.
a482b5a5 14
41bdb6e2 15 You should have received a copy of the GNU Lesser General Public
59ba27a6
PE
16 License along with the GNU C Library; if not, see
17 <http://www.gnu.org/licenses/>. */
a482b5a5 18
299a95b9 19#include <wchar.h>
a482b5a5
RM
20
21
22/* Compare no more than N characters of S1 and S2,
23 returning less than, equal to or greater than zero
6d52618b 24 if S1 is lexicographically less than, equal to or
a482b5a5
RM
25 greater than S2. */
26int
27wcsncmp (s1, s2, n)
299a95b9
RM
28 const wchar_t *s1;
29 const wchar_t *s2;
30 size_t n;
a482b5a5 31{
59dd8641
RM
32 wint_t c1 = L'\0';
33 wint_t c2 = L'\0';
a482b5a5
RM
34
35 if (n >= 4)
36 {
37 size_t n4 = n >> 2;
38 do
39 {
59dd8641
RM
40 c1 = (wint_t) *s1++;
41 c2 = (wint_t) *s2++;
a482b5a5
RM
42 if (c1 == L'\0' || c1 != c2)
43 return c1 - c2;
59dd8641
RM
44 c1 = (wint_t) *s1++;
45 c2 = (wint_t) *s2++;
a482b5a5
RM
46 if (c1 == L'\0' || c1 != c2)
47 return c1 - c2;
59dd8641
RM
48 c1 = (wint_t) *s1++;
49 c2 = (wint_t) *s2++;
a482b5a5
RM
50 if (c1 == L'\0' || c1 != c2)
51 return c1 - c2;
59dd8641
RM
52 c1 = (wint_t) *s1++;
53 c2 = (wint_t) *s2++;
a482b5a5
RM
54 if (c1 == L'\0' || c1 != c2)
55 return c1 - c2;
56 } while (--n4 > 0);
57 n &= 3;
58 }
59
60 while (n > 0)
61 {
59dd8641
RM
62 c1 = (wint_t) *s1++;
63 c2 = (wint_t) *s2++;
a482b5a5
RM
64 if (c1 == L'\0' || c1 != c2)
65 return c1 - c2;
66 n--;
67 }
68
69 return c1 - c2;
70}