10db70a6aSJohn Marino /* $FreeBSD: head/lib/libiconv_modules/EUC/citrus_euc.c 281550 2015-04-15 09:09:20Z tijl $ */
20d5acd74SJohn Marino /* $NetBSD: citrus_euc.c,v 1.14 2009/01/11 02:46:24 christos Exp $ */
30d5acd74SJohn Marino
40d5acd74SJohn Marino /*-
50d5acd74SJohn Marino * Copyright (c)2002 Citrus Project,
60d5acd74SJohn Marino * All rights reserved.
70d5acd74SJohn Marino *
80d5acd74SJohn Marino * Redistribution and use in source and binary forms, with or without
90d5acd74SJohn Marino * modification, are permitted provided that the following conditions
100d5acd74SJohn Marino * are met:
110d5acd74SJohn Marino * 1. Redistributions of source code must retain the above copyright
120d5acd74SJohn Marino * notice, this list of conditions and the following disclaimer.
130d5acd74SJohn Marino * 2. Redistributions in binary form must reproduce the above copyright
140d5acd74SJohn Marino * notice, this list of conditions and the following disclaimer in the
150d5acd74SJohn Marino * documentation and/or other materials provided with the distribution.
160d5acd74SJohn Marino *
170d5acd74SJohn Marino * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
180d5acd74SJohn Marino * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
190d5acd74SJohn Marino * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
200d5acd74SJohn Marino * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
210d5acd74SJohn Marino * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
220d5acd74SJohn Marino * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
230d5acd74SJohn Marino * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
240d5acd74SJohn Marino * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
250d5acd74SJohn Marino * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
260d5acd74SJohn Marino * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
270d5acd74SJohn Marino * SUCH DAMAGE.
280d5acd74SJohn Marino */
290d5acd74SJohn Marino
300d5acd74SJohn Marino /*-
310d5acd74SJohn Marino * Copyright (c) 1993
320d5acd74SJohn Marino * The Regents of the University of California. All rights reserved.
330d5acd74SJohn Marino *
340d5acd74SJohn Marino * This code is derived from software contributed to Berkeley by
350d5acd74SJohn Marino * Paul Borman at Krystal Technologies.
360d5acd74SJohn Marino *
370d5acd74SJohn Marino * Redistribution and use in source and binary forms, with or without
380d5acd74SJohn Marino * modification, are permitted provided that the following conditions
390d5acd74SJohn Marino * are met:
400d5acd74SJohn Marino * 1. Redistributions of source code must retain the above copyright
410d5acd74SJohn Marino * notice, this list of conditions and the following disclaimer.
420d5acd74SJohn Marino * 2. Redistributions in binary form must reproduce the above copyright
430d5acd74SJohn Marino * notice, this list of conditions and the following disclaimer in the
440d5acd74SJohn Marino * documentation and/or other materials provided with the distribution.
450d5acd74SJohn Marino * 3. Neither the name of the University nor the names of its contributors
460d5acd74SJohn Marino * may be used to endorse or promote products derived from this software
470d5acd74SJohn Marino * without specific prior written permission.
480d5acd74SJohn Marino *
490d5acd74SJohn Marino * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
500d5acd74SJohn Marino * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
510d5acd74SJohn Marino * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
520d5acd74SJohn Marino * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
530d5acd74SJohn Marino * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
540d5acd74SJohn Marino * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
550d5acd74SJohn Marino * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
560d5acd74SJohn Marino * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
570d5acd74SJohn Marino * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
580d5acd74SJohn Marino * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
590d5acd74SJohn Marino * SUCH DAMAGE.
600d5acd74SJohn Marino */
610d5acd74SJohn Marino
620d5acd74SJohn Marino #include <sys/cdefs.h>
630d5acd74SJohn Marino #include <sys/types.h>
640d5acd74SJohn Marino
650d5acd74SJohn Marino #include <assert.h>
660d5acd74SJohn Marino #include <errno.h>
670d5acd74SJohn Marino #include <limits.h>
680d5acd74SJohn Marino #include <stddef.h>
690d5acd74SJohn Marino #include <stdio.h>
700d5acd74SJohn Marino #include <stdlib.h>
710d5acd74SJohn Marino #include <string.h>
720d5acd74SJohn Marino #include <wchar.h>
730d5acd74SJohn Marino
740d5acd74SJohn Marino #include "citrus_namespace.h"
750d5acd74SJohn Marino #include "citrus_bcs.h"
760d5acd74SJohn Marino #include "citrus_types.h"
770d5acd74SJohn Marino #include "citrus_module.h"
780d5acd74SJohn Marino #include "citrus_stdenc.h"
790d5acd74SJohn Marino #include "citrus_euc.h"
800d5acd74SJohn Marino
810d5acd74SJohn Marino
820d5acd74SJohn Marino /* ----------------------------------------------------------------------
830d5acd74SJohn Marino * private stuffs used by templates
840d5acd74SJohn Marino */
850d5acd74SJohn Marino
860d5acd74SJohn Marino typedef struct {
870d5acd74SJohn Marino int chlen;
880d5acd74SJohn Marino char ch[3];
890d5acd74SJohn Marino } _EUCState;
900d5acd74SJohn Marino
910d5acd74SJohn Marino typedef struct {
920d5acd74SJohn Marino wchar_t bits[4];
930d5acd74SJohn Marino wchar_t mask;
940d5acd74SJohn Marino unsigned count[4];
950d5acd74SJohn Marino unsigned mb_cur_max;
960d5acd74SJohn Marino } _EUCEncodingInfo;
970d5acd74SJohn Marino
980d5acd74SJohn Marino #define _SS2 0x008e
990d5acd74SJohn Marino #define _SS3 0x008f
1000d5acd74SJohn Marino
1010d5acd74SJohn Marino #define _CEI_TO_EI(_cei_) (&(_cei_)->ei)
1020d5acd74SJohn Marino #define _CEI_TO_STATE(_cei_, _func_) (_cei_)->states.s_##_func_
1030d5acd74SJohn Marino
1040d5acd74SJohn Marino #define _FUNCNAME(m) _citrus_EUC_##m
1050d5acd74SJohn Marino #define _ENCODING_INFO _EUCEncodingInfo
1060d5acd74SJohn Marino #define _ENCODING_STATE _EUCState
1070d5acd74SJohn Marino #define _ENCODING_MB_CUR_MAX(_ei_) (_ei_)->mb_cur_max
1080d5acd74SJohn Marino #define _ENCODING_IS_STATE_DEPENDENT 0
1090d5acd74SJohn Marino #define _STATE_NEEDS_EXPLICIT_INIT(_ps_) 0
1100d5acd74SJohn Marino
1110d5acd74SJohn Marino
1120d5acd74SJohn Marino static __inline int
_citrus_EUC_cs(unsigned int c)1130d5acd74SJohn Marino _citrus_EUC_cs(unsigned int c)
1140d5acd74SJohn Marino {
1150d5acd74SJohn Marino
1160d5acd74SJohn Marino c &= 0xff;
1170d5acd74SJohn Marino
1180d5acd74SJohn Marino return ((c & 0x80) ? c == _SS3 ? 3 : c == _SS2 ? 2 : 1 : 0);
1190d5acd74SJohn Marino }
1200d5acd74SJohn Marino
1210d5acd74SJohn Marino static __inline int
_citrus_EUC_parse_variable(_EUCEncodingInfo * ei,const void * var,size_t lenvar __unused)1220d5acd74SJohn Marino _citrus_EUC_parse_variable(_EUCEncodingInfo *ei, const void *var,
1230d5acd74SJohn Marino size_t lenvar __unused)
1240d5acd74SJohn Marino {
1250d5acd74SJohn Marino char *e;
1260d5acd74SJohn Marino const char *v;
1270d5acd74SJohn Marino int x;
1280d5acd74SJohn Marino
1290d5acd74SJohn Marino /* parse variable string */
1300d5acd74SJohn Marino if (!var)
1310d5acd74SJohn Marino return (EFTYPE);
1320d5acd74SJohn Marino
1330d5acd74SJohn Marino v = (const char *)var;
1340d5acd74SJohn Marino
1350d5acd74SJohn Marino while (*v == ' ' || *v == '\t')
1360d5acd74SJohn Marino ++v;
1370d5acd74SJohn Marino
1380d5acd74SJohn Marino ei->mb_cur_max = 1;
1390d5acd74SJohn Marino for (x = 0; x < 4; ++x) {
1400d5acd74SJohn Marino ei->count[x] = (int)_bcs_strtol(v, (char **)&e, 0);
1410d5acd74SJohn Marino if (v == e || !(v = e) || ei->count[x] < 1 || ei->count[x] > 4) {
1420d5acd74SJohn Marino return (EFTYPE);
1430d5acd74SJohn Marino }
1440d5acd74SJohn Marino if (ei->mb_cur_max < ei->count[x])
1450d5acd74SJohn Marino ei->mb_cur_max = ei->count[x];
1460d5acd74SJohn Marino while (*v == ' ' || *v == '\t')
1470d5acd74SJohn Marino ++v;
1480d5acd74SJohn Marino ei->bits[x] = (int)_bcs_strtol(v, (char **)&e, 0);
1490d5acd74SJohn Marino if (v == e || !(v = e)) {
1500d5acd74SJohn Marino return (EFTYPE);
1510d5acd74SJohn Marino }
1520d5acd74SJohn Marino while (*v == ' ' || *v == '\t')
1530d5acd74SJohn Marino ++v;
1540d5acd74SJohn Marino }
1550d5acd74SJohn Marino ei->mask = (int)_bcs_strtol(v, (char **)&e, 0);
1560d5acd74SJohn Marino if (v == e || !(v = e)) {
1570d5acd74SJohn Marino return (EFTYPE);
1580d5acd74SJohn Marino }
1590d5acd74SJohn Marino
1600d5acd74SJohn Marino return (0);
1610d5acd74SJohn Marino }
1620d5acd74SJohn Marino
1630d5acd74SJohn Marino
1640d5acd74SJohn Marino static __inline void
1650d5acd74SJohn Marino /*ARGSUSED*/
_citrus_EUC_init_state(_EUCEncodingInfo * ei __unused,_EUCState * s)1660d5acd74SJohn Marino _citrus_EUC_init_state(_EUCEncodingInfo *ei __unused, _EUCState *s)
1670d5acd74SJohn Marino {
1680d5acd74SJohn Marino
1690d5acd74SJohn Marino memset(s, 0, sizeof(*s));
1700d5acd74SJohn Marino }
1710d5acd74SJohn Marino
172*71ea2de5SJohn Marino #if 0
1730d5acd74SJohn Marino static __inline void
1740d5acd74SJohn Marino /*ARGSUSED*/
1750d5acd74SJohn Marino _citrus_EUC_pack_state(_EUCEncodingInfo *ei __unused, void *pspriv,
1760d5acd74SJohn Marino const _EUCState *s)
1770d5acd74SJohn Marino {
1780d5acd74SJohn Marino
1790d5acd74SJohn Marino memcpy(pspriv, (const void *)s, sizeof(*s));
1800d5acd74SJohn Marino }
1810d5acd74SJohn Marino
1820d5acd74SJohn Marino static __inline void
1830d5acd74SJohn Marino /*ARGSUSED*/
1840d5acd74SJohn Marino _citrus_EUC_unpack_state(_EUCEncodingInfo *ei __unused, _EUCState *s,
1850d5acd74SJohn Marino const void *pspriv)
1860d5acd74SJohn Marino {
1870d5acd74SJohn Marino
1880d5acd74SJohn Marino memcpy((void *)s, pspriv, sizeof(*s));
1890d5acd74SJohn Marino }
190*71ea2de5SJohn Marino #endif
1910d5acd74SJohn Marino
1920d5acd74SJohn Marino static int
_citrus_EUC_mbrtowc_priv(_EUCEncodingInfo * ei,wchar_t * pwc,char ** s,size_t n,_EUCState * psenc,size_t * nresult)1930db70a6aSJohn Marino _citrus_EUC_mbrtowc_priv(_EUCEncodingInfo *ei, wchar_t *pwc, char **s,
1940d5acd74SJohn Marino size_t n, _EUCState *psenc, size_t *nresult)
1950d5acd74SJohn Marino {
1960d5acd74SJohn Marino wchar_t wchar;
1970d5acd74SJohn Marino int c, chlenbak, cs, len;
1980db70a6aSJohn Marino char *s0, *s1 = NULL;
1990d5acd74SJohn Marino
2000d5acd74SJohn Marino s0 = *s;
2010d5acd74SJohn Marino
2020d5acd74SJohn Marino if (s0 == NULL) {
2030d5acd74SJohn Marino _citrus_EUC_init_state(ei, psenc);
2040d5acd74SJohn Marino *nresult = 0; /* state independent */
2050d5acd74SJohn Marino return (0);
2060d5acd74SJohn Marino }
2070d5acd74SJohn Marino
2080d5acd74SJohn Marino chlenbak = psenc->chlen;
2090d5acd74SJohn Marino
2100d5acd74SJohn Marino /* make sure we have the first byte in the buffer */
2110d5acd74SJohn Marino switch (psenc->chlen) {
2120d5acd74SJohn Marino case 0:
2130d5acd74SJohn Marino if (n < 1)
2140d5acd74SJohn Marino goto restart;
2150d5acd74SJohn Marino psenc->ch[0] = *s0++;
2160d5acd74SJohn Marino psenc->chlen = 1;
2170d5acd74SJohn Marino n--;
2180d5acd74SJohn Marino break;
2190d5acd74SJohn Marino case 1:
2200d5acd74SJohn Marino case 2:
2210d5acd74SJohn Marino break;
2220d5acd74SJohn Marino default:
2230d5acd74SJohn Marino /* illgeal state */
2240d5acd74SJohn Marino goto encoding_error;
2250d5acd74SJohn Marino }
2260d5acd74SJohn Marino
2270d5acd74SJohn Marino c = ei->count[cs = _citrus_EUC_cs(psenc->ch[0] & 0xff)];
2280d5acd74SJohn Marino if (c == 0)
2290d5acd74SJohn Marino goto encoding_error;
2300d5acd74SJohn Marino while (psenc->chlen < c) {
2310d5acd74SJohn Marino if (n < 1)
2320d5acd74SJohn Marino goto restart;
2330d5acd74SJohn Marino psenc->ch[psenc->chlen] = *s0++;
2340d5acd74SJohn Marino psenc->chlen++;
2350d5acd74SJohn Marino n--;
2360d5acd74SJohn Marino }
2370d5acd74SJohn Marino *s = s0;
2380d5acd74SJohn Marino
2390d5acd74SJohn Marino switch (cs) {
2400d5acd74SJohn Marino case 3:
2410d5acd74SJohn Marino case 2:
2420d5acd74SJohn Marino /* skip SS2/SS3 */
2430d5acd74SJohn Marino len = c - 1;
2440d5acd74SJohn Marino s1 = &psenc->ch[1];
2450d5acd74SJohn Marino break;
2460d5acd74SJohn Marino case 1:
2470d5acd74SJohn Marino case 0:
2480d5acd74SJohn Marino len = c;
2490d5acd74SJohn Marino s1 = &psenc->ch[0];
2500d5acd74SJohn Marino break;
2510d5acd74SJohn Marino default:
2520d5acd74SJohn Marino goto encoding_error;
2530d5acd74SJohn Marino }
2540d5acd74SJohn Marino wchar = 0;
2550d5acd74SJohn Marino while (len-- > 0)
2560d5acd74SJohn Marino wchar = (wchar << 8) | (*s1++ & 0xff);
2570d5acd74SJohn Marino wchar = (wchar & ~ei->mask) | ei->bits[cs];
2580d5acd74SJohn Marino
2590d5acd74SJohn Marino psenc->chlen = 0;
2600d5acd74SJohn Marino if (pwc)
2610d5acd74SJohn Marino *pwc = wchar;
2620d5acd74SJohn Marino *nresult = wchar ? (size_t)(c - chlenbak) : 0;
2630d5acd74SJohn Marino return (0);
2640d5acd74SJohn Marino
2650d5acd74SJohn Marino encoding_error:
2660d5acd74SJohn Marino psenc->chlen = 0;
2670d5acd74SJohn Marino *nresult = (size_t)-1;
2680d5acd74SJohn Marino return (EILSEQ);
2690d5acd74SJohn Marino
2700d5acd74SJohn Marino restart:
2710d5acd74SJohn Marino *nresult = (size_t)-2;
2720d5acd74SJohn Marino *s = s0;
2730d5acd74SJohn Marino return (0);
2740d5acd74SJohn Marino }
2750d5acd74SJohn Marino
2760d5acd74SJohn Marino static int
_citrus_EUC_wcrtomb_priv(_EUCEncodingInfo * ei,char * s,size_t n,wchar_t wc,_EUCState * psenc __unused,size_t * nresult)2770d5acd74SJohn Marino _citrus_EUC_wcrtomb_priv(_EUCEncodingInfo *ei, char *s, size_t n, wchar_t wc,
2780d5acd74SJohn Marino _EUCState *psenc __unused, size_t *nresult)
2790d5acd74SJohn Marino {
2800d5acd74SJohn Marino wchar_t m, nm;
2810d5acd74SJohn Marino unsigned int cs;
2820d5acd74SJohn Marino int ret;
2830d5acd74SJohn Marino short i;
2840d5acd74SJohn Marino
2850d5acd74SJohn Marino m = wc & ei->mask;
2860d5acd74SJohn Marino nm = wc & ~m;
2870d5acd74SJohn Marino
2880d5acd74SJohn Marino for (cs = 0; cs < sizeof(ei->count) / sizeof(ei->count[0]); cs++)
2890d5acd74SJohn Marino if (m == ei->bits[cs])
2900d5acd74SJohn Marino break;
2910d5acd74SJohn Marino /* fallback case - not sure if it is necessary */
2920d5acd74SJohn Marino if (cs == sizeof(ei->count) / sizeof(ei->count[0]))
2930d5acd74SJohn Marino cs = 1;
2940d5acd74SJohn Marino
2950d5acd74SJohn Marino i = ei->count[cs];
2960d5acd74SJohn Marino if (n < (unsigned)i) {
2970d5acd74SJohn Marino ret = E2BIG;
2980d5acd74SJohn Marino goto err;
2990d5acd74SJohn Marino }
3000d5acd74SJohn Marino m = (cs) ? 0x80 : 0x00;
3010d5acd74SJohn Marino switch (cs) {
3020d5acd74SJohn Marino case 2:
3030d5acd74SJohn Marino *s++ = _SS2;
3040d5acd74SJohn Marino i--;
3050d5acd74SJohn Marino break;
3060d5acd74SJohn Marino case 3:
3070d5acd74SJohn Marino *s++ = _SS3;
3080d5acd74SJohn Marino i--;
3090d5acd74SJohn Marino break;
3100d5acd74SJohn Marino }
3110d5acd74SJohn Marino
3120d5acd74SJohn Marino while (i-- > 0)
3130d5acd74SJohn Marino *s++ = ((nm >> (i << 3)) & 0xff) | m;
3140d5acd74SJohn Marino
3150d5acd74SJohn Marino *nresult = (size_t)ei->count[cs];
3160d5acd74SJohn Marino return (0);
3170d5acd74SJohn Marino
3180d5acd74SJohn Marino err:
3190d5acd74SJohn Marino *nresult = (size_t)-1;
3200d5acd74SJohn Marino return (ret);
3210d5acd74SJohn Marino }
3220d5acd74SJohn Marino
3230d5acd74SJohn Marino static __inline int
3240d5acd74SJohn Marino /*ARGSUSED*/
_citrus_EUC_stdenc_wctocs(_EUCEncodingInfo * __restrict ei,_csid_t * __restrict csid,_index_t * __restrict idx,wchar_t wc)3250d5acd74SJohn Marino _citrus_EUC_stdenc_wctocs(_EUCEncodingInfo * __restrict ei,
3260d5acd74SJohn Marino _csid_t * __restrict csid, _index_t * __restrict idx, wchar_t wc)
3270d5acd74SJohn Marino {
3280d5acd74SJohn Marino wchar_t m, nm;
3290d5acd74SJohn Marino
3300d5acd74SJohn Marino m = wc & ei->mask;
3310d5acd74SJohn Marino nm = wc & ~m;
3320d5acd74SJohn Marino
3330d5acd74SJohn Marino *csid = (_citrus_csid_t)m;
3340d5acd74SJohn Marino *idx = (_citrus_index_t)nm;
3350d5acd74SJohn Marino
3360d5acd74SJohn Marino return (0);
3370d5acd74SJohn Marino }
3380d5acd74SJohn Marino
3390d5acd74SJohn Marino static __inline int
3400d5acd74SJohn Marino /*ARGSUSED*/
_citrus_EUC_stdenc_cstowc(_EUCEncodingInfo * __restrict ei,wchar_t * __restrict wc,_csid_t csid,_index_t idx)3410d5acd74SJohn Marino _citrus_EUC_stdenc_cstowc(_EUCEncodingInfo * __restrict ei,
3420d5acd74SJohn Marino wchar_t * __restrict wc, _csid_t csid, _index_t idx)
3430d5acd74SJohn Marino {
3440d5acd74SJohn Marino
3450d5acd74SJohn Marino if ((csid & ~ei->mask) != 0 || (idx & ei->mask) != 0)
3460d5acd74SJohn Marino return (EINVAL);
3470d5acd74SJohn Marino
3480d5acd74SJohn Marino *wc = (wchar_t)csid | (wchar_t)idx;
3490d5acd74SJohn Marino
3500d5acd74SJohn Marino return (0);
3510d5acd74SJohn Marino }
3520d5acd74SJohn Marino
3530d5acd74SJohn Marino static __inline int
3540d5acd74SJohn Marino /*ARGSUSED*/
_citrus_EUC_stdenc_get_state_desc_generic(_EUCEncodingInfo * __restrict ei __unused,_EUCState * __restrict psenc,int * __restrict rstate)3550d5acd74SJohn Marino _citrus_EUC_stdenc_get_state_desc_generic(_EUCEncodingInfo * __restrict ei __unused,
3560d5acd74SJohn Marino _EUCState * __restrict psenc, int * __restrict rstate)
3570d5acd74SJohn Marino {
3580d5acd74SJohn Marino
3590d5acd74SJohn Marino *rstate = (psenc->chlen == 0) ? _STDENC_SDGEN_INITIAL :
3600d5acd74SJohn Marino _STDENC_SDGEN_INCOMPLETE_CHAR;
3610d5acd74SJohn Marino return (0);
3620d5acd74SJohn Marino }
3630d5acd74SJohn Marino
3640d5acd74SJohn Marino static int
3650d5acd74SJohn Marino /*ARGSUSED*/
_citrus_EUC_encoding_module_init(_EUCEncodingInfo * __restrict ei,const void * __restrict var,size_t lenvar)3660d5acd74SJohn Marino _citrus_EUC_encoding_module_init(_EUCEncodingInfo * __restrict ei,
3670d5acd74SJohn Marino const void * __restrict var, size_t lenvar)
3680d5acd74SJohn Marino {
3690d5acd74SJohn Marino
3700d5acd74SJohn Marino return (_citrus_EUC_parse_variable(ei, var, lenvar));
3710d5acd74SJohn Marino }
3720d5acd74SJohn Marino
3730d5acd74SJohn Marino static void
3740d5acd74SJohn Marino /*ARGSUSED*/
_citrus_EUC_encoding_module_uninit(_EUCEncodingInfo * __restrict ei __unused)3750d5acd74SJohn Marino _citrus_EUC_encoding_module_uninit(_EUCEncodingInfo * __restrict ei __unused)
3760d5acd74SJohn Marino {
3770d5acd74SJohn Marino
3780d5acd74SJohn Marino }
3790d5acd74SJohn Marino
3800d5acd74SJohn Marino /* ----------------------------------------------------------------------
3810d5acd74SJohn Marino * public interface for stdenc
3820d5acd74SJohn Marino */
3830d5acd74SJohn Marino
3840d5acd74SJohn Marino _CITRUS_STDENC_DECLS(EUC);
3850d5acd74SJohn Marino _CITRUS_STDENC_DEF_OPS(EUC);
3860d5acd74SJohn Marino
3870d5acd74SJohn Marino #include "citrus_stdenc_template.h"
388