1 /* 2 * Copyright 2015 Nexenta Systmes, Inc. All rights reserved. 3 * Copyright 2013 Garrett D'Amore <garrett@damore.org> 4 * Copyright (c) 1995 Alex Tatmanjants <alex@elvisti.kiev.ua> 5 * at Electronni Visti IA, Kiev, Ukraine. 6 * All rights reserved. 7 * 8 * Redistribution and use in source and binary forms, with or without 9 * modification, are permitted provided that the following conditions 10 * are met: 11 * 1. Redistributions of source code must retain the above copyright 12 * notice, this list of conditions and the following disclaimer. 13 * 2. Redistributions in binary form must reproduce the above copyright 14 * notice, this list of conditions and the following disclaimer in the 15 * documentation and/or other materials provided with the distribution. 16 * 17 * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND 18 * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 19 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 20 * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR BE LIABLE 21 * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL 22 * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS 23 * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) 24 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT 25 * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY 26 * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF 27 * SUCH DAMAGE. 28 */ 29 30 #ifndef _COLLATE_H_ 31 #define _COLLATE_H_ 32 33 /* 34 * This file defines the libc interface to LC_COLLATE data. 35 */ 36 37 #include <sys/types.h> 38 #include <limits.h> 39 #include "collatefile.h" 40 #include "localeimpl.h" 41 42 /* 43 * This is the run-time (in-memory) form of LC_COLLATE data. 44 */ 45 struct lc_collate { 46 int lc_is_posix; 47 48 uint8_t lc_directive_count; 49 uint8_t lc_directive[COLL_WEIGHTS_MAX]; 50 int32_t lc_pri_count[COLL_WEIGHTS_MAX]; 51 int32_t lc_flags; 52 int32_t lc_chain_count; 53 int32_t lc_large_count; 54 int32_t lc_subst_count[COLL_WEIGHTS_MAX]; 55 int32_t lc_undef_pri[COLL_WEIGHTS_MAX]; 56 57 collate_info_t *lc_info; 58 collate_char_t *lc_char_table; 59 collate_large_t *lc_large_table; 60 collate_chain_t *lc_chain_table; 61 collate_subst_t *lc_subst_table[COLL_WEIGHTS_MAX]; 62 }; 63 64 void _collate_lookup(const struct lc_collate *, const wchar_t *, 65 int *, int *, int, const int **); 66 size_t _collate_wxfrm(const struct lc_collate *, const wchar_t *, 67 wchar_t *, size_t); 68 size_t _collate_sxfrm(const wchar_t *, char *, size_t, locale_t); 69 int _collate_range_cmp(wchar_t, wchar_t, locale_t); 70 71 #endif /* !_COLLATE_H_ */