]> git.saurik.com Git - apple/libc.git/blobdiff - locale/FreeBSD/collcmp.c
Libc-1082.50.1.tar.gz
[apple/libc.git] / locale / FreeBSD / collcmp.c
index 97046a9d5e66d249442f368bd4c58cf0e0a798d1..7f135bcc94bbbf3c0738f43bcb91e6ba787804f5 100644 (file)
  */
 
 #include <sys/cdefs.h>
-__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 <string.h>
+#include <xlocale.h>
+#include <wchar.h>
 #include "collate.h"
-#ifndef ASCII_COMPATIBLE_COLLATE
-#include <ctype.h>
-#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));
 }