15d9d0b528387242011cdcc6190c9e598cfe3a07yy * CDDL HEADER START
15d9d0b528387242011cdcc6190c9e598cfe3a07yy * The contents of this file are subject to the terms of the
15d9d0b528387242011cdcc6190c9e598cfe3a07yy * Common Development and Distribution License (the "License").
15d9d0b528387242011cdcc6190c9e598cfe3a07yy * You may not use this file except in compliance with the License.
15d9d0b528387242011cdcc6190c9e598cfe3a07yy * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
15d9d0b528387242011cdcc6190c9e598cfe3a07yy * See the License for the specific language governing permissions
15d9d0b528387242011cdcc6190c9e598cfe3a07yy * and limitations under the License.
15d9d0b528387242011cdcc6190c9e598cfe3a07yy * When distributing Covered Code, include this CDDL HEADER in each
15d9d0b528387242011cdcc6190c9e598cfe3a07yy * file and include the License file at usr/src/OPENSOLARIS.LICENSE.
15d9d0b528387242011cdcc6190c9e598cfe3a07yy * If applicable, add the following below this CDDL HEADER, with the
15d9d0b528387242011cdcc6190c9e598cfe3a07yy * fields enclosed by brackets "[]" replaced with your own identifying
15d9d0b528387242011cdcc6190c9e598cfe3a07yy * information: Portions Copyright [yyyy] [name of copyright owner]
15d9d0b528387242011cdcc6190c9e598cfe3a07yy * CDDL HEADER END
15d9d0b528387242011cdcc6190c9e598cfe3a07yy * Copyright 2008 Sun Microsystems, Inc. All rights reserved.
15d9d0b528387242011cdcc6190c9e598cfe3a07yy * Use is subject to license terms.
15d9d0b528387242011cdcc6190c9e598cfe3a07yy#pragma ident "%Z%%M% %I% %E% SMI"
15d9d0b528387242011cdcc6190c9e598cfe3a07yy/* 4 HKSCS-2004 code points map to 2 Unicode code points separately. */
15d9d0b528387242011cdcc6190c9e598cfe3a07yy/* 4 Unicode code point pair map to 1 HKSCS-2004 code point. */
15d9d0b528387242011cdcc6190c9e598cfe3a07yytypedef int8_t (*kiconv_big5toutf8_t)(uint32_t value, uchar_t *ob,
15d9d0b528387242011cdcc6190c9e598cfe3a07yystatic int8_t utf8_to_big5(uint32_t utf8, uchar_t **inbuf, uchar_t *ibtail,
15d9d0b528387242011cdcc6190c9e598cfe3a07yystatic int8_t utf8_to_euctw(uint32_t utf8, uchar_t **inbuf, uchar_t *ibtail,
15d9d0b528387242011cdcc6190c9e598cfe3a07yystatic int8_t utf8_to_cp950hkscs(uint32_t utf8, uchar_t **inbuf,
15d9d0b528387242011cdcc6190c9e598cfe3a07yy uchar_t *ibtail, uchar_t *ob, uchar_t *obtail, size_t *ret_val);
15d9d0b528387242011cdcc6190c9e598cfe3a07yystatic int8_t utf8_to_big5hkscs(uint32_t utf8, uchar_t **inbuf, uchar_t *ibtail,
15d9d0b528387242011cdcc6190c9e598cfe3a07yystatic int8_t big5_to_utf8(uint32_t big5_val, uchar_t *ob, uchar_t *obtail,
15d9d0b528387242011cdcc6190c9e598cfe3a07yystatic int8_t big5hkscs_to_utf8(uint32_t hkscs_val, uchar_t *ob,
15d9d0b528387242011cdcc6190c9e598cfe3a07yystatic int8_t cp950hkscs_to_utf8(uint32_t hkscs_val, uchar_t *ob,
15d9d0b528387242011cdcc6190c9e598cfe3a07yystatic int8_t euctw_to_utf8(size_t plane_no, uint32_t euctw_val,
15d9d0b528387242011cdcc6190c9e598cfe3a07yystatic uint32_t get_unicode_from_UDA(size_t plane_no, uchar_t byte1,
15d9d0b528387242011cdcc6190c9e598cfe3a07yystatic void *
15d9d0b528387242011cdcc6190c9e598cfe3a07yy return ((void *)KICONV_TC_BIG5);
15d9d0b528387242011cdcc6190c9e598cfe3a07yystatic void *
15d9d0b528387242011cdcc6190c9e598cfe3a07yy return ((void *)KICONV_TC_BIG5HKSCS);
15d9d0b528387242011cdcc6190c9e598cfe3a07yystatic void *
15d9d0b528387242011cdcc6190c9e598cfe3a07yy return ((void *)KICONV_TC_CP950HKSCS);
15d9d0b528387242011cdcc6190c9e598cfe3a07yystatic void *
15d9d0b528387242011cdcc6190c9e598cfe3a07yy return ((void *)KICONV_TC_EUCTW);
15d9d0b528387242011cdcc6190c9e598cfe3a07yy return (0);
15d9d0b528387242011cdcc6190c9e598cfe3a07yy * Common convertor from BIG5/HKSCS(BIG5-HKSCS or CP950-HKSCS) to UTF-8.
15d9d0b528387242011cdcc6190c9e598cfe3a07yykiconv_fr_big5_common(void *kcd, char **inbuf, size_t *inbytesleft,
15d9d0b528387242011cdcc6190c9e598cfe3a07yy /* Check on the kiconv code conversion descriptor. */
15d9d0b528387242011cdcc6190c9e598cfe3a07yy /* If this is a state reset request, process and return. */
15d9d0b528387242011cdcc6190c9e598cfe3a07yy return (0);
15d9d0b528387242011cdcc6190c9e598cfe3a07yy * Issue EILSEQ error if the first byte is not a
15d9d0b528387242011cdcc6190c9e598cfe3a07yy * valid BIG5/HKSCS leading byte.
15d9d0b528387242011cdcc6190c9e598cfe3a07yy * Issue EINVAL error if input buffer has an incomplete
15d9d0b528387242011cdcc6190c9e598cfe3a07yy * character at the end of the buffer.
15d9d0b528387242011cdcc6190c9e598cfe3a07yy * Issue EILSEQ error if the remaining bytes is not
15d9d0b528387242011cdcc6190c9e598cfe3a07yy * a valid BIG5/HKSCS byte.
15d9d0b528387242011cdcc6190c9e598cfe3a07yy /* Now we have a valid BIG5/HKSCS character. */
15d9d0b528387242011cdcc6190c9e598cfe3a07yy if (sz < 0) {
15d9d0b528387242011cdcc6190c9e598cfe3a07yy * String based Common convertor from BIG5/HKSCS(BIG5-HKSCS or CP950-HKSCS)
15d9d0b528387242011cdcc6190c9e598cfe3a07yy * to UTF-8.
15d9d0b528387242011cdcc6190c9e598cfe3a07yykiconvstr_fr_big5_common(uchar_t *ib, size_t *inlen, uchar_t *ob,
15d9d0b528387242011cdcc6190c9e598cfe3a07yy if (sz < 0) {
15d9d0b528387242011cdcc6190c9e598cfe3a07yy * Encoding convertor from BIG5 to UTF-8.
15d9d0b528387242011cdcc6190c9e598cfe3a07yykiconv_fr_big5(void *kcd, char **inbuf, size_t *inbytesleft, char **outbuf,
15d9d0b528387242011cdcc6190c9e598cfe3a07yy return (kiconv_fr_big5_common(kcd, inbuf, inbytesleft, outbuf,
15d9d0b528387242011cdcc6190c9e598cfe3a07yy * String based encoding convertor from BIG5 to UTF-8.
15d9d0b528387242011cdcc6190c9e598cfe3a07yykiconvstr_fr_big5(char *inarray, size_t *inlen, char *outarray,
15d9d0b528387242011cdcc6190c9e598cfe3a07yy return (kiconvstr_fr_big5_common((uchar_t *)inarray, inlen,
15d9d0b528387242011cdcc6190c9e598cfe3a07yy * Encoding convertor from BIG5-HKSCS to UTF-8.
15d9d0b528387242011cdcc6190c9e598cfe3a07yykiconv_fr_big5hkscs(void *kcd, char **inbuf, size_t *inbytesleft,
15d9d0b528387242011cdcc6190c9e598cfe3a07yy return kiconv_fr_big5_common(kcd, inbuf, inbytesleft, outbuf,
15d9d0b528387242011cdcc6190c9e598cfe3a07yy * String based encoding convertor from BIG5-HKSCS to UTF-8.
15d9d0b528387242011cdcc6190c9e598cfe3a07yykiconvstr_fr_big5hkscs(char *inarray, size_t *inlen, char *outarray,
15d9d0b528387242011cdcc6190c9e598cfe3a07yy return kiconvstr_fr_big5_common((uchar_t *)inarray, inlen,
15d9d0b528387242011cdcc6190c9e598cfe3a07yy (uchar_t *)outarray, outlen, flag, errno, big5hkscs_to_utf8);
15d9d0b528387242011cdcc6190c9e598cfe3a07yy * Encoding convertor from CP950-HKSCS to UTF-8.
15d9d0b528387242011cdcc6190c9e598cfe3a07yykiconv_fr_cp950hkscs(void *kcd, char **inbuf, size_t *inbytesleft,
15d9d0b528387242011cdcc6190c9e598cfe3a07yy return kiconv_fr_big5_common(kcd, inbuf, inbytesleft, outbuf,
15d9d0b528387242011cdcc6190c9e598cfe3a07yy * String based encoding convertor from CP950-HKSCS to UTF-8.
15d9d0b528387242011cdcc6190c9e598cfe3a07yykiconvstr_fr_cp950hkscs(char *inarray, size_t *inlen, char *outarray,
15d9d0b528387242011cdcc6190c9e598cfe3a07yy return kiconvstr_fr_big5_common((uchar_t *)inarray, inlen,
15d9d0b528387242011cdcc6190c9e598cfe3a07yy (uchar_t *)outarray, outlen, flag, errno, cp950hkscs_to_utf8);
15d9d0b528387242011cdcc6190c9e598cfe3a07yy * Encoding convertor from EUC-TW to UTF-8.
15d9d0b528387242011cdcc6190c9e598cfe3a07yykiconv_fr_euctw(void *kcd, char **inbuf, size_t *inbytesleft,
15d9d0b528387242011cdcc6190c9e598cfe3a07yy /* Check on the kiconv code conversion descriptor. */
15d9d0b528387242011cdcc6190c9e598cfe3a07yy /* If this is a state reset request, process and return. */
15d9d0b528387242011cdcc6190c9e598cfe3a07yy return (0);
15d9d0b528387242011cdcc6190c9e598cfe3a07yy * Issue EILSEQ error if the first byte is not a
15d9d0b528387242011cdcc6190c9e598cfe3a07yy * valid EUC-TW leading byte.
15d9d0b528387242011cdcc6190c9e598cfe3a07yy * Issue EINVAL error if input buffer has an incomplete
15d9d0b528387242011cdcc6190c9e598cfe3a07yy * character at the end of the buffer.
15d9d0b528387242011cdcc6190c9e598cfe3a07yy plane_no = isplane1 ? 1 : *(ib + 1) - KICONV_TC_EUCTW_PMASK;
15d9d0b528387242011cdcc6190c9e598cfe3a07yy * Issue EILSEQ error if the remaining bytes are not
15d9d0b528387242011cdcc6190c9e598cfe3a07yy * valid EUC-TW bytes.
15d9d0b528387242011cdcc6190c9e598cfe3a07yy /* Now we have a valid EUC-TW character. */
15d9d0b528387242011cdcc6190c9e598cfe3a07yy sz = euctw_to_utf8(plane_no, euctw_val, ob, obtail, &ret_val);
15d9d0b528387242011cdcc6190c9e598cfe3a07yy if (sz < 0) {
15d9d0b528387242011cdcc6190c9e598cfe3a07yy * String based encoding convertor from EUC-TW to UTF-8.
15d9d0b528387242011cdcc6190c9e598cfe3a07yykiconvstr_fr_euctw(char *inarray, size_t *inlen, char *outarray,
15d9d0b528387242011cdcc6190c9e598cfe3a07yy plane_no = isplane1 ? 1 : *(ib + 1) - KICONV_TC_EUCTW_PMASK;
15d9d0b528387242011cdcc6190c9e598cfe3a07yy sz = euctw_to_utf8(plane_no, euctw_val, ob, obtail, &ret_val);
15d9d0b528387242011cdcc6190c9e598cfe3a07yy if (sz < 0) {
15d9d0b528387242011cdcc6190c9e598cfe3a07yy * Encoding convertor from UTF-8 to BIG5.
15d9d0b528387242011cdcc6190c9e598cfe3a07yykiconv_to_big5(void *kcd, char **inbuf, size_t *inbytesleft,
15d9d0b528387242011cdcc6190c9e598cfe3a07yy return kiconv_utf8_to_cck(kcd, inbuf, inbytesleft, outbuf,
15d9d0b528387242011cdcc6190c9e598cfe3a07yy * String based encoding convertor from UTF-8 to BIG5.
15d9d0b528387242011cdcc6190c9e598cfe3a07yykiconvstr_to_big5(char *inarray, size_t *inlen, char *outarray,
15d9d0b528387242011cdcc6190c9e598cfe3a07yy * Encoding convertor from UTF-8 to EUC-TW.
15d9d0b528387242011cdcc6190c9e598cfe3a07yykiconv_to_euctw(void *kcd, char **inbuf, size_t *inbytesleft,
15d9d0b528387242011cdcc6190c9e598cfe3a07yy return kiconv_utf8_to_cck(kcd, inbuf, inbytesleft, outbuf,
15d9d0b528387242011cdcc6190c9e598cfe3a07yy * String based encoding convertor from UTF-8 to EUC-TW.
15d9d0b528387242011cdcc6190c9e598cfe3a07yykiconvstr_to_euctw(char *inarray, size_t *inlen, char *outarray,
15d9d0b528387242011cdcc6190c9e598cfe3a07yy (uchar_t *)outarray, outlen, flag, errno, utf8_to_euctw);
15d9d0b528387242011cdcc6190c9e598cfe3a07yy * Encoding convertor from UTF-8 to CP950HKSCS.
15d9d0b528387242011cdcc6190c9e598cfe3a07yykiconv_to_cp950hkscs(void *kcd, char **inbuf, size_t *inbytesleft,
15d9d0b528387242011cdcc6190c9e598cfe3a07yy return kiconv_utf8_to_cck(kcd, inbuf, inbytesleft, outbuf,
15d9d0b528387242011cdcc6190c9e598cfe3a07yy * String based encoding convertor from UTF-8 to CP950HKSCS.
15d9d0b528387242011cdcc6190c9e598cfe3a07yykiconvstr_to_cp950hkscs(char *inarray, size_t *inlen, char *outarray,
15d9d0b528387242011cdcc6190c9e598cfe3a07yy (uchar_t *)outarray, outlen, flag, errno, utf8_to_cp950hkscs);
15d9d0b528387242011cdcc6190c9e598cfe3a07yy * Encoding convertor from UTF-8 to BIG5HKSCS(HKSCS-2004).
15d9d0b528387242011cdcc6190c9e598cfe3a07yykiconv_to_big5hkscs(void *kcd, char **inbuf, size_t *inbytesleft,
15d9d0b528387242011cdcc6190c9e598cfe3a07yy return kiconv_utf8_to_cck(kcd, inbuf, inbytesleft, outbuf,
15d9d0b528387242011cdcc6190c9e598cfe3a07yy * String based encoding convertor from UTF-8 to BIG5HKSCS(HKSCS-2004).
15d9d0b528387242011cdcc6190c9e598cfe3a07yykiconvstr_to_big5hkscs(char *inarray, size_t *inlen, char *outarray,
15d9d0b528387242011cdcc6190c9e598cfe3a07yy (uchar_t *)outarray, outlen, flag, errno, utf8_to_big5hkscs);
15d9d0b528387242011cdcc6190c9e598cfe3a07yy * Common convertor from single BIG5/CP950-HKSCS character to UTF-8.
15d9d0b528387242011cdcc6190c9e598cfe3a07yy * Return: > 0 - Converted successfully
15d9d0b528387242011cdcc6190c9e598cfe3a07yy * = -1 - E2BIG
15d9d0b528387242011cdcc6190c9e598cfe3a07yybig5_to_utf8_common(uint32_t big5_val, uchar_t *ob, uchar_t *obtail,
15d9d0b528387242011cdcc6190c9e598cfe3a07yy size_t *ret_val, kiconv_table_array_t *table, size_t nitems)
15d9d0b528387242011cdcc6190c9e598cfe3a07yy return (-1);
15d9d0b528387242011cdcc6190c9e598cfe3a07yy return (sz);
15d9d0b528387242011cdcc6190c9e598cfe3a07yy * Convert single BIG5 character to UTF-8.
15d9d0b528387242011cdcc6190c9e598cfe3a07yybig5_to_utf8(uint32_t big5_val, uchar_t *ob, uchar_t *obtail, size_t *ret_val)
15d9d0b528387242011cdcc6190c9e598cfe3a07yy return (big5_to_utf8_common(big5_val, ob, obtail, ret_val,
15d9d0b528387242011cdcc6190c9e598cfe3a07yy * Convert single CP950-HKSCS character to UTF-8.
15d9d0b528387242011cdcc6190c9e598cfe3a07yycp950hkscs_to_utf8(uint32_t hkscs_val, uchar_t *ob, uchar_t *obtail,
15d9d0b528387242011cdcc6190c9e598cfe3a07yy return (big5_to_utf8_common(hkscs_val, ob, obtail, ret_val,
15d9d0b528387242011cdcc6190c9e598cfe3a07yy * Calculate unicode value for some CNS planes which fall in Unicode
15d9d0b528387242011cdcc6190c9e598cfe3a07yy * UDA range.
15d9d0b528387242011cdcc6190c9e598cfe3a07yyget_unicode_from_UDA(size_t plane_no, uchar_t b1, uchar_t b2)
15d9d0b528387242011cdcc6190c9e598cfe3a07yy * CNS Plane 15 is pre-allocated, so need move Plane 16 to back 15
15d9d0b528387242011cdcc6190c9e598cfe3a07yy * to compute the Unicode value.
15d9d0b528387242011cdcc6190c9e598cfe3a07yy /* 0xF0000 + (plane_no - 12) * 8836 + (b1 - 0xA1) * 94 + (b2 - 0xA1) */
15d9d0b528387242011cdcc6190c9e598cfe3a07yy * Convert single EUC-TW character to UTF-8.
15d9d0b528387242011cdcc6190c9e598cfe3a07yy * Return: > 0 - Converted successfully
15d9d0b528387242011cdcc6190c9e598cfe3a07yy * = -1 - E2BIG
15d9d0b528387242011cdcc6190c9e598cfe3a07yyeuctw_to_utf8(size_t plane_no, uint32_t euctw_val, uchar_t *ob,
15d9d0b528387242011cdcc6190c9e598cfe3a07yy * As U+F0000 <= u32 <= U+F8A0F, so its UTF-8 sequence
15d9d0b528387242011cdcc6190c9e598cfe3a07yy * will occupy 4 bytes.
15d9d0b528387242011cdcc6190c9e598cfe3a07yy return (-1);
15d9d0b528387242011cdcc6190c9e598cfe3a07yy return (sz);
15d9d0b528387242011cdcc6190c9e598cfe3a07yy * Convert single HKSCS character to UTF-8.
15d9d0b528387242011cdcc6190c9e598cfe3a07yy * Return: > 0 - Converted successfully
15d9d0b528387242011cdcc6190c9e598cfe3a07yy * = -1 - E2BIG
15d9d0b528387242011cdcc6190c9e598cfe3a07yybig5hkscs_to_utf8(uint32_t hkscs_val, uchar_t *ob, uchar_t *obtail,
15d9d0b528387242011cdcc6190c9e598cfe3a07yy * Single HKSCS-2004 character may map to 2 Unicode
15d9d0b528387242011cdcc6190c9e598cfe3a07yy * code points.
15d9d0b528387242011cdcc6190c9e598cfe3a07yy return (-1);
15d9d0b528387242011cdcc6190c9e598cfe3a07yy return (sz);
15d9d0b528387242011cdcc6190c9e598cfe3a07yy * Convert single UTF-8 character to EUC-TW.
15d9d0b528387242011cdcc6190c9e598cfe3a07yy * Return: > 0 - Converted successfully
15d9d0b528387242011cdcc6190c9e598cfe3a07yy * = -1 - E2BIG
15d9d0b528387242011cdcc6190c9e598cfe3a07yy/* ARGSUSED */
15d9d0b528387242011cdcc6190c9e598cfe3a07yyutf8_to_euctw(uint32_t utf8, uchar_t **inbuf, uchar_t *ibtail,
15d9d0b528387242011cdcc6190c9e598cfe3a07yy * Calculate EUC-TW code if utf8 is in Unicode
15d9d0b528387242011cdcc6190c9e598cfe3a07yy * Private Plane 15.
15d9d0b528387242011cdcc6190c9e598cfe3a07yy index = (((utf8 & 0x7000000) >> 6) | ((utf8 & 0x3F0000) >> 4) |
15d9d0b528387242011cdcc6190c9e598cfe3a07yy /* CNS Plane 15 is pre-allocated, so place it into Plane 16. */
15d9d0b528387242011cdcc6190c9e598cfe3a07yy if (index == 0) {
15d9d0b528387242011cdcc6190c9e598cfe3a07yy return (-1);
15d9d0b528387242011cdcc6190c9e598cfe3a07yy return (1);
15d9d0b528387242011cdcc6190c9e598cfe3a07yy return (-1);
15d9d0b528387242011cdcc6190c9e598cfe3a07yy * Convert single UTF-8 character to BIG5-HKSCS
15d9d0b528387242011cdcc6190c9e598cfe3a07yy * Return: > 0 - Converted successfully
15d9d0b528387242011cdcc6190c9e598cfe3a07yy * = -1 - E2BIG
15d9d0b528387242011cdcc6190c9e598cfe3a07yyutf8_to_big5hkscs(uint32_t utf8, uchar_t **inbuf, uchar_t *ibtail,
15d9d0b528387242011cdcc6190c9e598cfe3a07yy * There are 4 special code points in HKSCS-2004 which mapped
15d9d0b528387242011cdcc6190c9e598cfe3a07yy * to 2 UNICODE code points.
15d9d0b528387242011cdcc6190c9e598cfe3a07yy /* Check the following 2 bytes. */
15d9d0b528387242011cdcc6190c9e598cfe3a07yy return (-1);
15d9d0b528387242011cdcc6190c9e598cfe3a07yy if (special_sequence) { /* Advance for special sequence */
15d9d0b528387242011cdcc6190c9e598cfe3a07yy * Common convertor for UTF-8 to BIG5/CP950-HKSCS.
15d9d0b528387242011cdcc6190c9e598cfe3a07yy * Return: > 0 - Converted successfully
15d9d0b528387242011cdcc6190c9e598cfe3a07yy * = -1 - E2BIG
15d9d0b528387242011cdcc6190c9e598cfe3a07yyutf8_to_big5_common(uint32_t utf8, uchar_t *ob, uchar_t *obtail,
15d9d0b528387242011cdcc6190c9e598cfe3a07yy return (-1);
15d9d0b528387242011cdcc6190c9e598cfe3a07yy * Convert single UTF-8 character to BIG5.
15d9d0b528387242011cdcc6190c9e598cfe3a07yy/* ARGSUSED */
15d9d0b528387242011cdcc6190c9e598cfe3a07yyutf8_to_big5(uint32_t utf8, uchar_t **inbuf, uchar_t *ibtail,
15d9d0b528387242011cdcc6190c9e598cfe3a07yy * Convert single UTF-8 character to CP950-HKSCS for Windows compatibility.
15d9d0b528387242011cdcc6190c9e598cfe3a07yy/* ARGSUSED */
15d9d0b528387242011cdcc6190c9e598cfe3a07yyutf8_to_cp950hkscs(uint32_t utf8, uchar_t **inbuf, uchar_t *ibtail,
15d9d0b528387242011cdcc6190c9e598cfe3a07yy "big5-hkscs", "utf-8", kiconv_open_to_cck, kiconv_to_big5hkscs,
15d9d0b528387242011cdcc6190c9e598cfe3a07yy "utf-8", "big5-hkscs", open_fr_big5hkscs, kiconv_fr_big5hkscs,
15d9d0b528387242011cdcc6190c9e598cfe3a07yy kiconv_fr_cp950hkscs, close_fr_tc, kiconvstr_fr_cp950hkscs
15d9d0b528387242011cdcc6190c9e598cfe3a07yy sizeof (kiconv_tc_ops_tbl) / sizeof (kiconv_tc_ops_tbl[0]),
15d9d0b528387242011cdcc6190c9e598cfe3a07yy "kiconv Traditional Chinese module 1.0",
15d9d0b528387242011cdcc6190c9e598cfe3a07yy cmn_err(CE_WARN, "kiconv_tc: failed to load kernel module");
15d9d0b528387242011cdcc6190c9e598cfe3a07yy * If this module is being used, then, we cannot remove the module.
15d9d0b528387242011cdcc6190c9e598cfe3a07yy * The following checking will catch pretty much all usual cases.
15d9d0b528387242011cdcc6190c9e598cfe3a07yy * Any remaining will be catached by the kiconv_unregister_module()
15d9d0b528387242011cdcc6190c9e598cfe3a07yy * during mod_remove() at below.
15d9d0b528387242011cdcc6190c9e598cfe3a07yy cmn_err(CE_WARN, "kiconv_tc: failed to remove kernel module");