]> git.ipfire.org Git - thirdparty/glibc.git/blame - wcsmbs/wcsncmp.c
Fix testsuite build for GCC 7 -Wformat-truncation.
[thirdparty/glibc.git] / wcsmbs / wcsncmp.c
CommitLineData
bfff8b1b 1/* Copyright (C) 1995-2017 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 20
cee82e70
SL
21#ifndef WCSNCMP
22# define WCSNCMP wcsncmp
23#endif
a482b5a5
RM
24
25/* Compare no more than N characters of S1 and S2,
26 returning less than, equal to or greater than zero
6d52618b 27 if S1 is lexicographically less than, equal to or
a482b5a5
RM
28 greater than S2. */
29int
9d46370c 30WCSNCMP (const wchar_t *s1, const wchar_t *s2, size_t n)
a482b5a5 31{
920a0395
SL
32 wchar_t c1 = L'\0';
33 wchar_t c2 = L'\0';
a482b5a5
RM
34
35 if (n >= 4)
36 {
37 size_t n4 = n >> 2;
38 do
39 {
920a0395
SL
40 c1 = *s1++;
41 c2 = *s2++;
a482b5a5 42 if (c1 == L'\0' || c1 != c2)
920a0395
SL
43 return c1 > c2 ? 1 : (c1 < c2 ? -1 : 0);
44 c1 = *s1++;
45 c2 = *s2++;
a482b5a5 46 if (c1 == L'\0' || c1 != c2)
920a0395
SL
47 return c1 > c2 ? 1 : (c1 < c2 ? -1 : 0);
48 c1 = *s1++;
49 c2 = *s2++;
a482b5a5 50 if (c1 == L'\0' || c1 != c2)
920a0395
SL
51 return c1 > c2 ? 1 : (c1 < c2 ? -1 : 0);
52 c1 = *s1++;
53 c2 = *s2++;
a482b5a5 54 if (c1 == L'\0' || c1 != c2)
920a0395 55 return c1 > c2 ? 1 : (c1 < c2 ? -1 : 0);
a482b5a5
RM
56 } while (--n4 > 0);
57 n &= 3;
58 }
59
60 while (n > 0)
61 {
920a0395
SL
62 c1 = *s1++;
63 c2 = *s2++;
a482b5a5 64 if (c1 == L'\0' || c1 != c2)
920a0395 65 return c1 > c2 ? 1 : (c1 < c2 ? -1 : 0);
a482b5a5
RM
66 n--;
67 }
68
920a0395 69 return 0;
a482b5a5 70}