xref: /freebsd/lib/libc/iconv/citrus_stdenc.h (revision ad30f8e79bd1007cc2476e491bd21b4f5e389e0a)
1*ad30f8e7SGabor Kovesdan /* $FreeBSD$ */
2*ad30f8e7SGabor Kovesdan /* $NetBSD: citrus_stdenc.h,v 1.4 2005/10/29 18:02:04 tshiozak Exp $ */
3*ad30f8e7SGabor Kovesdan 
4*ad30f8e7SGabor Kovesdan /*-
5*ad30f8e7SGabor Kovesdan  * Copyright (c)2003 Citrus Project,
6*ad30f8e7SGabor Kovesdan  * All rights reserved.
7*ad30f8e7SGabor Kovesdan  *
8*ad30f8e7SGabor Kovesdan  * Redistribution and use in source and binary forms, with or without
9*ad30f8e7SGabor Kovesdan  * modification, are permitted provided that the following conditions
10*ad30f8e7SGabor Kovesdan  * are met:
11*ad30f8e7SGabor Kovesdan  * 1. Redistributions of source code must retain the above copyright
12*ad30f8e7SGabor Kovesdan  *    notice, this list of conditions and the following disclaimer.
13*ad30f8e7SGabor Kovesdan  * 2. Redistributions in binary form must reproduce the above copyright
14*ad30f8e7SGabor Kovesdan  *    notice, this list of conditions and the following disclaimer in the
15*ad30f8e7SGabor Kovesdan  *    documentation and/or other materials provided with the distribution.
16*ad30f8e7SGabor Kovesdan  *
17*ad30f8e7SGabor Kovesdan  * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
18*ad30f8e7SGabor Kovesdan  * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
19*ad30f8e7SGabor Kovesdan  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
20*ad30f8e7SGabor Kovesdan  * ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
21*ad30f8e7SGabor Kovesdan  * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
22*ad30f8e7SGabor Kovesdan  * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
23*ad30f8e7SGabor Kovesdan  * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
24*ad30f8e7SGabor Kovesdan  * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
25*ad30f8e7SGabor Kovesdan  * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
26*ad30f8e7SGabor Kovesdan  * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
27*ad30f8e7SGabor Kovesdan  * SUCH DAMAGE.
28*ad30f8e7SGabor Kovesdan  *
29*ad30f8e7SGabor Kovesdan  */
30*ad30f8e7SGabor Kovesdan 
31*ad30f8e7SGabor Kovesdan #ifndef _CITRUS_STDENC_H_
32*ad30f8e7SGabor Kovesdan #define _CITRUS_STDENC_H_
33*ad30f8e7SGabor Kovesdan 
34*ad30f8e7SGabor Kovesdan struct _citrus_stdenc;
35*ad30f8e7SGabor Kovesdan struct _citrus_stdenc_ops;
36*ad30f8e7SGabor Kovesdan struct _citrus_stdenc_traits;
37*ad30f8e7SGabor Kovesdan 
38*ad30f8e7SGabor Kovesdan #define _CITRUS_STDENC_SDID_GENERIC		0
39*ad30f8e7SGabor Kovesdan struct _citrus_stdenc_state_desc
40*ad30f8e7SGabor Kovesdan {
41*ad30f8e7SGabor Kovesdan 	union {
42*ad30f8e7SGabor Kovesdan 		struct {
43*ad30f8e7SGabor Kovesdan 			int	state;
44*ad30f8e7SGabor Kovesdan #define _CITRUS_STDENC_SDGEN_UNKNOWN		0
45*ad30f8e7SGabor Kovesdan #define _CITRUS_STDENC_SDGEN_INITIAL		1
46*ad30f8e7SGabor Kovesdan #define _CITRUS_STDENC_SDGEN_STABLE		2
47*ad30f8e7SGabor Kovesdan #define _CITRUS_STDENC_SDGEN_INCOMPLETE_CHAR	3
48*ad30f8e7SGabor Kovesdan #define _CITRUS_STDENC_SDGEN_INCOMPLETE_SHIFT	4
49*ad30f8e7SGabor Kovesdan 		} generic;
50*ad30f8e7SGabor Kovesdan 	} u;
51*ad30f8e7SGabor Kovesdan };
52*ad30f8e7SGabor Kovesdan 
53*ad30f8e7SGabor Kovesdan #include "citrus_stdenc_local.h"
54*ad30f8e7SGabor Kovesdan 
55*ad30f8e7SGabor Kovesdan __BEGIN_DECLS
56*ad30f8e7SGabor Kovesdan int	 _citrus_stdenc_open(struct _citrus_stdenc * __restrict * __restrict,
57*ad30f8e7SGabor Kovesdan 	    char const * __restrict, const void * __restrict, size_t);
58*ad30f8e7SGabor Kovesdan void	 _citrus_stdenc_close(struct _citrus_stdenc *);
59*ad30f8e7SGabor Kovesdan __END_DECLS
60*ad30f8e7SGabor Kovesdan 
61*ad30f8e7SGabor Kovesdan static __inline int
62*ad30f8e7SGabor Kovesdan _citrus_stdenc_init_state(struct _citrus_stdenc * __restrict ce,
63*ad30f8e7SGabor Kovesdan     void * __restrict ps)
64*ad30f8e7SGabor Kovesdan {
65*ad30f8e7SGabor Kovesdan 
66*ad30f8e7SGabor Kovesdan 	return ((*ce->ce_ops->eo_init_state)(ce, ps));
67*ad30f8e7SGabor Kovesdan }
68*ad30f8e7SGabor Kovesdan 
69*ad30f8e7SGabor Kovesdan static __inline int
70*ad30f8e7SGabor Kovesdan _citrus_stdenc_mbtocs(struct _citrus_stdenc * __restrict ce,
71*ad30f8e7SGabor Kovesdan     _citrus_csid_t * __restrict csid, _citrus_index_t * __restrict idx,
72*ad30f8e7SGabor Kovesdan     char ** __restrict s, size_t n, void * __restrict ps,
73*ad30f8e7SGabor Kovesdan     size_t * __restrict nresult, struct iconv_hooks *hooks)
74*ad30f8e7SGabor Kovesdan {
75*ad30f8e7SGabor Kovesdan 
76*ad30f8e7SGabor Kovesdan 	return ((*ce->ce_ops->eo_mbtocs)(ce, csid, idx, s, n, ps, nresult,
77*ad30f8e7SGabor Kovesdan 	    hooks));
78*ad30f8e7SGabor Kovesdan }
79*ad30f8e7SGabor Kovesdan 
80*ad30f8e7SGabor Kovesdan static __inline int
81*ad30f8e7SGabor Kovesdan _citrus_stdenc_cstomb(struct _citrus_stdenc * __restrict ce,
82*ad30f8e7SGabor Kovesdan     char * __restrict s, size_t n, _citrus_csid_t csid, _citrus_index_t idx,
83*ad30f8e7SGabor Kovesdan     void * __restrict ps, size_t * __restrict nresult,
84*ad30f8e7SGabor Kovesdan     struct iconv_hooks *hooks)
85*ad30f8e7SGabor Kovesdan {
86*ad30f8e7SGabor Kovesdan 
87*ad30f8e7SGabor Kovesdan 	return ((*ce->ce_ops->eo_cstomb)(ce, s, n, csid, idx, ps, nresult,
88*ad30f8e7SGabor Kovesdan 	    hooks));
89*ad30f8e7SGabor Kovesdan }
90*ad30f8e7SGabor Kovesdan 
91*ad30f8e7SGabor Kovesdan static __inline int
92*ad30f8e7SGabor Kovesdan _citrus_stdenc_wctomb(struct _citrus_stdenc * __restrict ce,
93*ad30f8e7SGabor Kovesdan     char * __restrict s, size_t n, _citrus_wc_t wc, void * __restrict ps,
94*ad30f8e7SGabor Kovesdan     size_t * __restrict nresult, struct iconv_hooks *hooks)
95*ad30f8e7SGabor Kovesdan {
96*ad30f8e7SGabor Kovesdan 
97*ad30f8e7SGabor Kovesdan 	return ((*ce->ce_ops->eo_wctomb)(ce, s, n, wc, ps, nresult, hooks));
98*ad30f8e7SGabor Kovesdan }
99*ad30f8e7SGabor Kovesdan 
100*ad30f8e7SGabor Kovesdan static __inline int
101*ad30f8e7SGabor Kovesdan _citrus_stdenc_put_state_reset(struct _citrus_stdenc * __restrict ce,
102*ad30f8e7SGabor Kovesdan     char * __restrict s, size_t n, void * __restrict ps,
103*ad30f8e7SGabor Kovesdan     size_t * __restrict nresult)
104*ad30f8e7SGabor Kovesdan {
105*ad30f8e7SGabor Kovesdan 
106*ad30f8e7SGabor Kovesdan 	return ((*ce->ce_ops->eo_put_state_reset)(ce, s, n, ps, nresult));
107*ad30f8e7SGabor Kovesdan }
108*ad30f8e7SGabor Kovesdan 
109*ad30f8e7SGabor Kovesdan static __inline size_t
110*ad30f8e7SGabor Kovesdan _citrus_stdenc_get_state_size(struct _citrus_stdenc *ce)
111*ad30f8e7SGabor Kovesdan {
112*ad30f8e7SGabor Kovesdan 
113*ad30f8e7SGabor Kovesdan 	return (ce->ce_traits->et_state_size);
114*ad30f8e7SGabor Kovesdan }
115*ad30f8e7SGabor Kovesdan 
116*ad30f8e7SGabor Kovesdan static __inline int
117*ad30f8e7SGabor Kovesdan _citrus_stdenc_get_state_desc(struct _citrus_stdenc * __restrict ce,
118*ad30f8e7SGabor Kovesdan     void * __restrict ps, int id,
119*ad30f8e7SGabor Kovesdan     struct _citrus_stdenc_state_desc * __restrict d)
120*ad30f8e7SGabor Kovesdan {
121*ad30f8e7SGabor Kovesdan 
122*ad30f8e7SGabor Kovesdan 	return ((*ce->ce_ops->eo_get_state_desc)(ce, ps, id, d));
123*ad30f8e7SGabor Kovesdan }
124*ad30f8e7SGabor Kovesdan #endif
125