Print this page
2964 need POSIX 2008 locale object support
Reviewed by: Robert Mustacchi <rm@joyent.com>

*** 1,6 **** --- 1,7 ---- /* + * Copyright 2013 Garrett D'Amore <garrett@damore.org> * Copyright 2010 Nexenta Systmes, Inc. All rights reserved. * Copyright (c) 1995 Alex Tatmanjants <alex@elvisti.kiev.ua> * at Electronni Visti IA, Kiev, Ukraine. * All rights reserved. *
*** 29,38 **** --- 30,41 ---- #ifndef _COLLATE_H_ #define _COLLATE_H_ #include <sys/types.h> #include <limits.h> + #include <locale.h> + #include "localeimpl.h" #define COLLATE_STR_LEN 24 /* should be 64-bit multiple */ #define COLLATE_VERSION "IllumosCollate2\n" #define COLLATE_MAX_PRIORITY (0x7fffffff) /* max signed value */
*** 90,105 **** typedef struct collate_subst { int32_t key; int32_t pri[COLLATE_STR_LEN]; } collate_subst_t; ! int _collate_load_tables(const char *); ! void _collate_lookup(const wchar_t *, int *, int *, int, int **); ! size_t _collate_wxfrm(const wchar_t *, wchar_t *, size_t); ! size_t _collate_sxfrm(const wchar_t *, char *, size_t); ! int _collate_range_cmp(wchar_t, wchar_t); ! extern int _collate_load_error; ! extern int _collate_substitute_nontrivial; ! extern collate_info_t *_collate_info; #endif /* !_COLLATE_H_ */ --- 93,124 ---- typedef struct collate_subst { int32_t key; int32_t pri[COLLATE_STR_LEN]; } collate_subst_t; ! struct lc_collate { ! int lc_is_posix; ! uint8_t lc_directive_count; ! uint8_t lc_directive[COLL_WEIGHTS_MAX]; ! int32_t lc_pri_count[COLL_WEIGHTS_MAX]; ! int32_t lc_flags; ! int32_t lc_chain_count; ! int32_t lc_large_count; ! int32_t lc_subst_count[COLL_WEIGHTS_MAX]; ! int32_t lc_undef_pri[COLL_WEIGHTS_MAX]; + collate_info_t *lc_info; + collate_char_t *lc_char_table; + collate_large_t *lc_large_table; + collate_chain_t *lc_chain_table; + collate_subst_t *lc_subst_table[COLL_WEIGHTS_MAX]; + }; + + void _collate_lookup(const struct lc_collate *, const wchar_t *, + int *, int *, int, const int **); + size_t _collate_wxfrm(const struct lc_collate *, const wchar_t *, + wchar_t *, size_t); + size_t _collate_sxfrm(const wchar_t *, char *, size_t, locale_t); + int _collate_range_cmp(wchar_t, wchar_t, locale_t); + #endif /* !_COLLATE_H_ */