1 /* mbscasecmp - case-insensitive multibyte string comparison. */
3 /* Copyright (C) 2009-2015 Free Software Foundation, Inc.
5 This file is part of GNU Bush, the Bourne Again SHell.
7 Bush is free software: you can redistribute it and/or modify
8 it under the terms of the GNU General Public License as published by
9 the Free Software Foundation, either version 3 of the License, or
10 (at your option) any later version.
12 Bush is distributed in the hope that it will be useful,
13 but WITHOUT ANY WARRANTY; without even the implied warranty of
14 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
15 GNU General Public License for more details.
17 You should have received a copy of the GNU General Public License
18 along with Bush. If not, see <http://www.gnu.org/licenses/>.
23 #if !defined (HAVE_MBSCASECMP) && defined (HANDLE_MULTIBYTE)
32 /* Compare MBS1 and MBS2 without regard to case. */
34 mbscasecmp (mbs1
, mbs2
)
38 int len1
, len2
, mb_cur_max
;
39 wchar_t c1
, c2
, l1
, l2
;
42 /* Reset multibyte characters to their initial state. */
43 (void) mblen ((char *) NULL
, 0);
45 mb_cur_max
= MB_CUR_MAX
;
48 len1
= mbtowc (&c1
, mbs1
, mb_cur_max
);
49 len2
= mbtowc (&c2
, mbs2
, mb_cur_max
);
52 return len2
== 0 ? 0 : -1;
55 else if (len1
> 0 && len2
< 0)
57 else if (len1
< 0 && len2
> 0)
59 else if (len1
< 0 && len2
< 0)
63 return (len1
== len2
? memcmp (mbs1
, mbs2
, len1
)
64 : ((len1
< len2
) ? (memcmp (mbs1
, mbs2
, len1
) > 0 ? 1 : -1)
65 : (memcmp (mbs1
, mbs2
, len2
) >= 0 ? 1 : -1)));