1 /* mbscmp - multibyte string comparison. */
3 /* Copyright (C) 1995-2018 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_MBSCMP) && defined (HANDLE_MULTIBYTE)
29 extern int locale_utf8locale
;
31 extern int utf8_mbscmp (const char *, const char *);
33 /* Compare MBS1 and MBS2. */
39 int len1
, len2
, mb_cur_max
;
43 /* Reset multibyte characters to their initial state. */
44 (void) mblen ((char *) NULL
, 0);
46 mb_cur_max
= MB_CUR_MAX
;
49 len1
= mbtowc (&c1
, mbs1
, mb_cur_max
);
50 len2
= mbtowc (&c2
, mbs2
, mb_cur_max
);
53 return len2
== 0 ? 0 : -1;
56 else if (len1
> 0 && len2
< 0)
58 else if (len1
< 0 && len2
> 0)
60 else if (len1
< 0 && len2
< 0)
64 return (len1
== len2
? memcmp (mbs1
, mbs2
, len1
)
65 : ((len1
< len2
) ? (memcmp (mbs1
, mbs2
, len1
) > 0 ? 1 : -1)
66 : (memcmp (mbs1
, mbs2
, len2
) >= 0 ? 1 : -1)));