xref: /freebsd/lib/libc/locale/collcmp.c (revision 4d846d260e2b9a3d4d0a701462568268cbfe7a5b)
1d915a14eSPedro F. Giffuni /*-
2*4d846d26SWarner Losh  * SPDX-License-Identifier: BSD-2-Clause
3d915a14eSPedro F. Giffuni  *
42eecfbacSAndrey A. Chernov  * Copyright (C) 1996 by Andrey A. Chernov, Moscow, Russia.
52eecfbacSAndrey A. Chernov  * All rights reserved.
62eecfbacSAndrey A. Chernov  *
73c87aa1dSDavid Chisnall  * Copyright (c) 2011 The FreeBSD Foundation
85b5fa75aSEd Maste  *
93c87aa1dSDavid Chisnall  * Portions of this software were developed by David Chisnall
103c87aa1dSDavid Chisnall  * under sponsorship from the FreeBSD Foundation.
113c87aa1dSDavid Chisnall  *
122eecfbacSAndrey A. Chernov  * Redistribution and use in source and binary forms, with or without
132eecfbacSAndrey A. Chernov  * modification, are permitted provided that the following conditions
142eecfbacSAndrey A. Chernov  * are met:
152eecfbacSAndrey A. Chernov  * 1. Redistributions of source code must retain the above copyright
162eecfbacSAndrey A. Chernov  *    notice, this list of conditions and the following disclaimer.
172eecfbacSAndrey A. Chernov  * 2. Redistributions in binary form must reproduce the above copyright
182eecfbacSAndrey A. Chernov  *    notice, this list of conditions and the following disclaimer in the
192eecfbacSAndrey A. Chernov  *    documentation and/or other materials provided with the distribution.
202eecfbacSAndrey A. Chernov  *
212eecfbacSAndrey A. Chernov  * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND
222eecfbacSAndrey A. Chernov  * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
232eecfbacSAndrey A. Chernov  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
242eecfbacSAndrey A. Chernov  * ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
252eecfbacSAndrey A. Chernov  * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
262eecfbacSAndrey A. Chernov  * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
272eecfbacSAndrey A. Chernov  * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
282eecfbacSAndrey A. Chernov  * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
292eecfbacSAndrey A. Chernov  * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
302eecfbacSAndrey A. Chernov  * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
312eecfbacSAndrey A. Chernov  * SUCH DAMAGE.
322eecfbacSAndrey A. Chernov  */
332eecfbacSAndrey A. Chernov 
34333fc21eSDavid E. O'Brien #include <sys/cdefs.h>
35333fc21eSDavid E. O'Brien __FBSDID("$FreeBSD$");
36333fc21eSDavid E. O'Brien 
372eecfbacSAndrey A. Chernov #include <string.h>
381daad8f5SAndrey A. Chernov #include <wchar.h>
39a9d25ab1SAndrey A. Chernov #include "collate.h"
40883a3266SAndrey A. Chernov 
41cb07d766SAndrey A. Chernov /*
428841d008SAndrey A. Chernov  * Compare two characters using collate
43cb07d766SAndrey A. Chernov  */
44cb07d766SAndrey A. Chernov 
4512eae8c8SAndrey A. Chernov int __collate_range_cmp(char c1, char c2)
463c2c0c04SPedro F. Giffuni {
473c2c0c04SPedro F. Giffuni 	char s1[2], s2[2];
483c2c0c04SPedro F. Giffuni 
493c2c0c04SPedro F. Giffuni 	s1[0] = c1;
503c2c0c04SPedro F. Giffuni 	s1[1] = '\0';
513c2c0c04SPedro F. Giffuni 	s2[0] = c2;
523c2c0c04SPedro F. Giffuni 	s2[1] = '\0';
5312eae8c8SAndrey A. Chernov 	return (strcoll(s1, s2));
541daad8f5SAndrey A. Chernov }
551daad8f5SAndrey A. Chernov 
5612eae8c8SAndrey A. Chernov int __wcollate_range_cmp(wchar_t c1, wchar_t c2)
571daad8f5SAndrey A. Chernov {
581daad8f5SAndrey A. Chernov 	wchar_t s1[2], s2[2];
591daad8f5SAndrey A. Chernov 
601daad8f5SAndrey A. Chernov 	s1[0] = c1;
611daad8f5SAndrey A. Chernov 	s1[1] = L'\0';
621daad8f5SAndrey A. Chernov 	s2[0] = c2;
631daad8f5SAndrey A. Chernov 	s2[1] = L'\0';
6412eae8c8SAndrey A. Chernov 	return (wcscoll(s1, s2));
652eecfbacSAndrey A. Chernov }
66