Update.
[glibc.git] / wcsmbs / wcsncmp.c
blob9b317725693ecac940f497982efb307caddba6c2
1 /* Copyright (C) 1995, 1996 Free Software Foundation, Inc.
2 This file is part of the GNU C Library.
3 Contributed by Ulrich Drepper <drepper@gnu.ai.mit.edu>, 1995.
5 The GNU C Library is free software; you can redistribute it and/or
6 modify it under the terms of the GNU Library General Public License as
7 published by the Free Software Foundation; either version 2 of the
8 License, or (at your option) any later version.
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
13 Library General Public License for more details.
15 You should have received a copy of the GNU Library General Public
16 License along with the GNU C Library; see the file COPYING.LIB. If not,
17 write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
18 Boston, MA 02111-1307, USA. */
20 #include <wchar.h>
23 /* Compare no more than N characters of S1 and S2,
24 returning less than, equal to or greater than zero
25 if S1 is lexicographically less than, equal to or
26 greater than S2. */
27 int
28 wcsncmp (s1, s2, n)
29 const wchar_t *s1;
30 const wchar_t *s2;
31 size_t n;
33 wint_t c1 = L'\0';
34 wint_t c2 = L'\0';
36 if (n >= 4)
38 size_t n4 = n >> 2;
41 c1 = (wint_t) *s1++;
42 c2 = (wint_t) *s2++;
43 if (c1 == L'\0' || c1 != c2)
44 return c1 - c2;
45 c1 = (wint_t) *s1++;
46 c2 = (wint_t) *s2++;
47 if (c1 == L'\0' || c1 != c2)
48 return c1 - c2;
49 c1 = (wint_t) *s1++;
50 c2 = (wint_t) *s2++;
51 if (c1 == L'\0' || c1 != c2)
52 return c1 - c2;
53 c1 = (wint_t) *s1++;
54 c2 = (wint_t) *s2++;
55 if (c1 == L'\0' || c1 != c2)
56 return c1 - c2;
57 } while (--n4 > 0);
58 n &= 3;
61 while (n > 0)
63 c1 = (wint_t) *s1++;
64 c2 = (wint_t) *s2++;
65 if (c1 == L'\0' || c1 != c2)
66 return c1 - c2;
67 n--;
70 return c1 - c2;