X-Git-Url: https://git.saurik.com/apple/libc.git/blobdiff_plain/9385eb3d10ebe5eb398c52040ec3dbfba9b0cdcf..15de9d6b4ab2de27ae24b13b7b6c4d55fffe4aef:/locale/FreeBSD/collcmp.c diff --git a/locale/FreeBSD/collcmp.c b/locale/FreeBSD/collcmp.c index 97046a9..7f135bc 100644 --- a/locale/FreeBSD/collcmp.c +++ b/locale/FreeBSD/collcmp.c @@ -25,61 +25,22 @@ */ #include -__FBSDID("$FreeBSD: src/lib/libc/locale/collcmp.c,v 1.14 2002/03/22 21:52:18 obrien Exp $"); +__FBSDID("$FreeBSD: src/lib/libc/locale/collcmp.c,v 1.18 2005/02/27 14:54:23 phantom Exp $"); -#define ASCII_COMPATIBLE_COLLATE /* see share/colldef */ - -#include +#include +#include #include "collate.h" -#ifndef ASCII_COMPATIBLE_COLLATE -#include -#endif /* - * Compare two characters converting collate information - * into ASCII-compatible range, it allows to handle - * "[a-z]"-type ranges with national characters. + * Compare two characters using collate */ -int __collate_range_cmp (c1, c2) - int c1, c2; +__private_extern__ int +__collate_range_cmp(wchar_t c1, wchar_t c2, locale_t loc) { - static char s1[2], s2[2]; - int ret; -#ifndef ASCII_COMPATIBLE_COLLATE - int as1, as2, al1, al2; -#endif - - c1 &= UCHAR_MAX; - c2 &= UCHAR_MAX; - if (c1 == c2) - return (0); - -#ifndef ASCII_COMPATIBLE_COLLATE - as1 = isascii(c1); - as2 = isascii(c2); - al1 = isalpha(c1); - al2 = isalpha(c2); + static wchar_t s1[2], s2[2]; - if (as1 || as2 || al1 || al2) { - if ((as1 && as2) || (!al1 && !al2)) - return (c1 - c2); - if (al1 && !al2) { - if (isupper(c1)) - return ('A' - c2); - else - return ('a' - c2); - } else if (al2 && !al1) { - if (isupper(c2)) - return (c1 - 'A'); - else - return (c1 - 'a'); - } - } -#endif s1[0] = c1; s2[0] = c2; - if ((ret = strcoll(s1, s2)) != 0) - return (ret); - return (c1 - c2); + return (wcscoll_l(s1, s2, loc)); }