1 /*- 2 * Copyright (c) 2004 Tim J. Robbins. 3 * All rights reserved. 4 * 5 * Copyright (c) 2011 The FreeBSD Foundation 6 * All rights reserved. 7 * Portions of this software were developed by David Chisnall 8 * under sponsorship from the FreeBSD Foundation. 9 * 10 * Redistribution and use in source and binary forms, with or without 11 * modification, are permitted provided that the following conditions 12 * are met: 13 * 1. Redistributions of source code must retain the above copyright 14 * notice, this list of conditions and the following disclaimer. 15 * 2. Redistributions in binary form must reproduce the above copyright 16 * notice, this list of conditions and the following disclaimer in the 17 * documentation and/or other materials provided with the distribution. 18 * 19 * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND 20 * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 21 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 22 * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE 23 * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL 24 * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS 25 * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) 26 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT 27 * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY 28 * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF 29 * SUCH DAMAGE. 30 * 31 * $FreeBSD$ 32 */ 33 34 #ifndef _MBLOCAL_H_ 35 #define _MBLOCAL_H_ 36 37 #include <runetype.h> 38 #include "xlocale_private.h" 39 40 41 /* 42 * Conversion function pointers for current encoding. 43 */ 44 struct xlocale_ctype { 45 struct xlocale_component header; 46 _RuneLocale *runes; 47 size_t (*__mbrtowc)(wchar_t * __restrict, const char * __restrict, 48 size_t, mbstate_t * __restrict); 49 int (*__mbsinit)(const mbstate_t *); 50 size_t (*__mbsnrtowcs)(wchar_t * __restrict, const char ** __restrict, 51 size_t, size_t, mbstate_t * __restrict); 52 size_t (*__wcrtomb)(char * __restrict, wchar_t, mbstate_t * __restrict); 53 size_t (*__wcsnrtombs)(char * __restrict, const wchar_t ** __restrict, 54 size_t, size_t, mbstate_t * __restrict); 55 int __mb_cur_max; 56 int __mb_sb_limit; 57 }; 58 #define XLOCALE_CTYPE(x) ((struct xlocale_ctype*)(x)->components[XLC_CTYPE]) 59 extern struct xlocale_ctype __xlocale_global_ctype; 60 61 /* 62 * Rune initialization function prototypes. 63 */ 64 int _none_init(struct xlocale_ctype *, _RuneLocale *); 65 int _ascii_init(struct xlocale_ctype *, _RuneLocale *); 66 int _UTF8_init(struct xlocale_ctype *, _RuneLocale *); 67 int _EUC_init(struct xlocale_ctype *, _RuneLocale *); 68 int _GB18030_init(struct xlocale_ctype *, _RuneLocale *); 69 int _GB2312_init(struct xlocale_ctype *, _RuneLocale *); 70 int _GBK_init(struct xlocale_ctype *, _RuneLocale *); 71 int _BIG5_init(struct xlocale_ctype *, _RuneLocale *); 72 int _MSKanji_init(struct xlocale_ctype *, _RuneLocale *); 73 74 extern size_t __mbsnrtowcs_std(wchar_t * __restrict, const char ** __restrict, 75 size_t, size_t, mbstate_t * __restrict); 76 extern size_t __wcsnrtombs_std(char * __restrict, const wchar_t ** __restrict, 77 size_t, size_t, mbstate_t * __restrict); 78 79 #endif /* _MBLOCAL_H_ */ 80