12eecfbacSAndrey A. Chernov /* 22eecfbacSAndrey A. Chernov * Copyright (C) 1996 by Andrey A. Chernov, Moscow, Russia. 32eecfbacSAndrey A. Chernov * All rights reserved. 42eecfbacSAndrey A. Chernov * 53c87aa1dSDavid Chisnall * Copyright (c) 2011 The FreeBSD Foundation 63c87aa1dSDavid Chisnall * All rights reserved. 73c87aa1dSDavid Chisnall * Portions of this software were developed by David Chisnall 83c87aa1dSDavid Chisnall * under sponsorship from the FreeBSD Foundation. 93c87aa1dSDavid Chisnall * 102eecfbacSAndrey A. Chernov * Redistribution and use in source and binary forms, with or without 112eecfbacSAndrey A. Chernov * modification, are permitted provided that the following conditions 122eecfbacSAndrey A. Chernov * are met: 132eecfbacSAndrey A. Chernov * 1. Redistributions of source code must retain the above copyright 142eecfbacSAndrey A. Chernov * notice, this list of conditions and the following disclaimer. 152eecfbacSAndrey A. Chernov * 2. Redistributions in binary form must reproduce the above copyright 162eecfbacSAndrey A. Chernov * notice, this list of conditions and the following disclaimer in the 172eecfbacSAndrey A. Chernov * documentation and/or other materials provided with the distribution. 182eecfbacSAndrey A. Chernov * 192eecfbacSAndrey A. Chernov * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND 202eecfbacSAndrey A. Chernov * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 212eecfbacSAndrey A. Chernov * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 222eecfbacSAndrey A. Chernov * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE 232eecfbacSAndrey A. Chernov * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL 242eecfbacSAndrey A. Chernov * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS 252eecfbacSAndrey A. Chernov * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) 262eecfbacSAndrey A. Chernov * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT 272eecfbacSAndrey A. Chernov * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY 282eecfbacSAndrey A. Chernov * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF 292eecfbacSAndrey A. Chernov * SUCH DAMAGE. 302eecfbacSAndrey A. Chernov */ 312eecfbacSAndrey A. Chernov 32333fc21eSDavid E. O'Brien #include <sys/cdefs.h> 33333fc21eSDavid E. O'Brien __FBSDID("$FreeBSD$"); 34333fc21eSDavid E. O'Brien 352eecfbacSAndrey A. Chernov #include <string.h> 36*1daad8f5SAndrey A. Chernov #include <wchar.h> 37*1daad8f5SAndrey A. Chernov #include <xlocale.h> 38a9d25ab1SAndrey A. Chernov #include "collate.h" 39883a3266SAndrey A. Chernov 40cb07d766SAndrey A. Chernov /* 418841d008SAndrey A. Chernov * Compare two characters using collate 42cb07d766SAndrey A. Chernov */ 43cb07d766SAndrey A. Chernov 44*1daad8f5SAndrey A. Chernov int __collate_range_cmp(struct xlocale_collate *table, char c1, char c2) 453c2c0c04SPedro F. Giffuni { 463c2c0c04SPedro F. Giffuni char s1[2], s2[2]; 473c2c0c04SPedro F. Giffuni 483c2c0c04SPedro F. Giffuni s1[0] = c1; 493c2c0c04SPedro F. Giffuni s1[1] = '\0'; 503c2c0c04SPedro F. Giffuni s2[0] = c2; 513c2c0c04SPedro F. Giffuni s2[1] = '\0'; 52*1daad8f5SAndrey A. Chernov struct _xlocale l = {{0}}; 53*1daad8f5SAndrey A. Chernov l.components[XLC_COLLATE] = (struct xlocale_component *)table; 54*1daad8f5SAndrey A. Chernov return (strcoll_l(s1, s2, &l)); 55*1daad8f5SAndrey A. Chernov } 56*1daad8f5SAndrey A. Chernov 57*1daad8f5SAndrey A. Chernov int __wcollate_range_cmp(struct xlocale_collate *table, wchar_t c1, wchar_t c2) 58*1daad8f5SAndrey A. Chernov { 59*1daad8f5SAndrey A. Chernov wchar_t s1[2], s2[2]; 60*1daad8f5SAndrey A. Chernov 61*1daad8f5SAndrey A. Chernov s1[0] = c1; 62*1daad8f5SAndrey A. Chernov s1[1] = L'\0'; 63*1daad8f5SAndrey A. Chernov s2[0] = c2; 64*1daad8f5SAndrey A. Chernov s2[1] = L'\0'; 65*1daad8f5SAndrey A. Chernov struct _xlocale l = {{0}}; 66*1daad8f5SAndrey A. Chernov l.components[XLC_COLLATE] = (struct xlocale_component *)table; 67*1daad8f5SAndrey A. Chernov return (wcscoll_l(s1, s2, &l)); 682eecfbacSAndrey A. Chernov } 69