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 * The following vector shows remaining bytes in a UTF-8 character.
15d9d0b528387242011cdcc6190c9e598cfe3a07yy * Index will be the first byte of the character. This is defined in
15d9d0b528387242011cdcc6190c9e598cfe3a07yy * The following is a vector of bit-masks to get used bits in
15d9d0b528387242011cdcc6190c9e598cfe3a07yy * the first byte of a UTF-8 character. Index is remaining bytes at above of
15d9d0b528387242011cdcc6190c9e598cfe3a07yy * the character. This is defined in uconv.c.
15d9d0b528387242011cdcc6190c9e598cfe3a07yy * The following two vectors are to provide valid minimum and
15d9d0b528387242011cdcc6190c9e598cfe3a07yy * maximum values for the 2'nd byte of a multibyte UTF-8 character for
15d9d0b528387242011cdcc6190c9e598cfe3a07yy * better illegal sequence checking. The index value must be the value of
15d9d0b528387242011cdcc6190c9e598cfe3a07yy * the first byte of the UTF-8 character. These are defined in u8_textprep.c.
15d9d0b528387242011cdcc6190c9e598cfe3a07yy if ((p = kiconv_ja_ucs2_to_euc16_index[ucs2 >> 8]) != NULL)
15d9d0b528387242011cdcc6190c9e598cfe3a07yyutf8_ucs(uint_t *p, uchar_t **pip, size_t *pileft, int *errno)
15d9d0b528387242011cdcc6190c9e598cfe3a07yy /* successfully converted */
15d9d0b528387242011cdcc6190c9e598cfe3a07yy if (ic1 != 0U) {
15d9d0b528387242011cdcc6190c9e598cfe3a07yy /* successfully converted */
15d9d0b528387242011cdcc6190c9e598cfe3a07yy if (rv == 0) {
15d9d0b528387242011cdcc6190c9e598cfe3a07yy * Update rv, *pip, and *pileft on successfule return.
15d9d0b528387242011cdcc6190c9e598cfe3a07yy return (rv);
15d9d0b528387242011cdcc6190c9e598cfe3a07yyutf8_ucs_replace(uint_t *p, uchar_t **pip, size_t *pileft, size_t *repnum)
15d9d0b528387242011cdcc6190c9e598cfe3a07yy /* successfully converted */
15d9d0b528387242011cdcc6190c9e598cfe3a07yy if (u8_size == U8_ILLEGAL_CHAR || u8_size == U8_OUT_OF_RANGE_CHAR) {
15d9d0b528387242011cdcc6190c9e598cfe3a07yy if (ic1 != 0U) {
15d9d0b528387242011cdcc6190c9e598cfe3a07yy /* successfully converted */
15d9d0b528387242011cdcc6190c9e598cfe3a07yy return (rv);
15d9d0b528387242011cdcc6190c9e598cfe3a07yy /* update *pop and *poleft only on successful return */
15d9d0b528387242011cdcc6190c9e598cfe3a07yy return (rv);
15d9d0b528387242011cdcc6190c9e598cfe3a07yystatic void *
15d9d0b528387242011cdcc6190c9e598cfe3a07yy kcd = (kiconv_state_t)kmem_alloc(sizeof (kiconv_state_data_t),
15d9d0b528387242011cdcc6190c9e598cfe3a07yy return ((void *)kcd);
15d9d0b528387242011cdcc6190c9e598cfe3a07yystatic void *
15d9d0b528387242011cdcc6190c9e598cfe3a07yystatic void *
15d9d0b528387242011cdcc6190c9e598cfe3a07yy return (_kiconv_ja_open_unicode(KICONV_JA_TBLID_EUCJP_MS));
15d9d0b528387242011cdcc6190c9e598cfe3a07yystatic void *
15d9d0b528387242011cdcc6190c9e598cfe3a07yystatic void *
15d9d0b528387242011cdcc6190c9e598cfe3a07yy return (0);
15d9d0b528387242011cdcc6190c9e598cfe3a07yy_do_kiconv_fr_eucjp(void *kcd, char **inbuf, size_t *inbytesleft,
15d9d0b528387242011cdcc6190c9e598cfe3a07yy uchar_t ic1, ic2, ic3; /* 1st, 2nd, and 3rd bytes of a char */
15d9d0b528387242011cdcc6190c9e598cfe3a07yy return (0);
15d9d0b528387242011cdcc6190c9e598cfe3a07yy while (ileft != 0) {
15d9d0b528387242011cdcc6190c9e598cfe3a07yy } else if (KICONV_JA_ISCS1(ic1)) { /* 0208 or UDC; 2 bytes */
15d9d0b528387242011cdcc6190c9e598cfe3a07yy } else { /* 2nd byte check failed */
15d9d0b528387242011cdcc6190c9e598cfe3a07yy } else { /* 2nd byte check failed */
15d9d0b528387242011cdcc6190c9e598cfe3a07yy } else if (ic1 == SS3) { /* JIS X 0212 or UDC; 3 bytes */
15d9d0b528387242011cdcc6190c9e598cfe3a07yy /* 3rd byte check passed */
15d9d0b528387242011cdcc6190c9e598cfe3a07yy } else { /* 3rd byte check failed */
15d9d0b528387242011cdcc6190c9e598cfe3a07yy } else { /* 2nd byte check failed */
15d9d0b528387242011cdcc6190c9e598cfe3a07yy /* C1 control; 1 byte */
15d9d0b528387242011cdcc6190c9e598cfe3a07yy } else { /* 1st byte check failed */
15d9d0b528387242011cdcc6190c9e598cfe3a07yy * One character successfully converted so update
15d9d0b528387242011cdcc6190c9e598cfe3a07yy * values outside of this function's stack.
15d9d0b528387242011cdcc6190c9e598cfe3a07yy return (rv);
15d9d0b528387242011cdcc6190c9e598cfe3a07yy_do_kiconv_to_eucjp(void *kcd, char **inbuf, size_t *inbytesleft,
15d9d0b528387242011cdcc6190c9e598cfe3a07yy return (0);
15d9d0b528387242011cdcc6190c9e598cfe3a07yy while (ileft != 0) {
15d9d0b528387242011cdcc6190c9e598cfe3a07yy /* non-BMP */
15d9d0b528387242011cdcc6190c9e598cfe3a07yy * One character successfully converted so update
15d9d0b528387242011cdcc6190c9e598cfe3a07yy * values outside of this function's stack.
15d9d0b528387242011cdcc6190c9e598cfe3a07yy return (rv);
15d9d0b528387242011cdcc6190c9e598cfe3a07yy_do_kiconvstr_fr_eucjp(char *inbuf, size_t *inbytesleft, char *outbuf,
15d9d0b528387242011cdcc6190c9e598cfe3a07yy uchar_t ic1, ic2, ic3; /* 1st, 2nd, and 3rd bytes of a char */
15d9d0b528387242011cdcc6190c9e598cfe3a07yy return (0);
15d9d0b528387242011cdcc6190c9e598cfe3a07yy while (ileft != 0) {
15d9d0b528387242011cdcc6190c9e598cfe3a07yy return (0);
15d9d0b528387242011cdcc6190c9e598cfe3a07yy } else if (KICONV_JA_ISCS1(ic1)) { /* 0208 or UDC; 2 bytes */
15d9d0b528387242011cdcc6190c9e598cfe3a07yy } else { /* 2nd byte check failed */
15d9d0b528387242011cdcc6190c9e598cfe3a07yy } else { /* 2nd byte check failed */
15d9d0b528387242011cdcc6190c9e598cfe3a07yy } else if (ic1 == SS3) { /* JIS X 0212 or UDC; 3 bytes */
15d9d0b528387242011cdcc6190c9e598cfe3a07yy /* 3rd byte check passed */
15d9d0b528387242011cdcc6190c9e598cfe3a07yy } else { /* 3rd byte check failed */
15d9d0b528387242011cdcc6190c9e598cfe3a07yy } else { /* 2nd byte check failed */
15d9d0b528387242011cdcc6190c9e598cfe3a07yy /* C1 control; 1 byte */
15d9d0b528387242011cdcc6190c9e598cfe3a07yy } else { /* 1st byte check failed */
15d9d0b528387242011cdcc6190c9e598cfe3a07yy * One character successfully converted so update
15d9d0b528387242011cdcc6190c9e598cfe3a07yy * values outside of this function's stack.
15d9d0b528387242011cdcc6190c9e598cfe3a07yy return (rv);
15d9d0b528387242011cdcc6190c9e598cfe3a07yy_do_kiconvstr_to_eucjp(char *inbuf, size_t *inbytesleft, char *outbuf,
15d9d0b528387242011cdcc6190c9e598cfe3a07yy return (0);
15d9d0b528387242011cdcc6190c9e598cfe3a07yy while (ileft != 0) {
15d9d0b528387242011cdcc6190c9e598cfe3a07yy return (0);
15d9d0b528387242011cdcc6190c9e598cfe3a07yy /* non-BMP */
15d9d0b528387242011cdcc6190c9e598cfe3a07yy * One character successfully converted so update
15d9d0b528387242011cdcc6190c9e598cfe3a07yy * values outside of this function's stack.
15d9d0b528387242011cdcc6190c9e598cfe3a07yy return (rv);
15d9d0b528387242011cdcc6190c9e598cfe3a07yykiconv_fr_eucjp(void *kcd, char **inbuf, size_t *inbytesleft,
15d9d0b528387242011cdcc6190c9e598cfe3a07yykiconv_to_eucjp(void *kcd, char **inbuf, size_t *inbytesleft,
15d9d0b528387242011cdcc6190c9e598cfe3a07yykiconvstr_fr_eucjp(char *inbuf, size_t *inbytesleft, char *outbuf,
15d9d0b528387242011cdcc6190c9e598cfe3a07yy return (_do_kiconvstr_fr_eucjp(inbuf, inbytesleft, outbuf,
15d9d0b528387242011cdcc6190c9e598cfe3a07yykiconvstr_to_eucjp(char *inbuf, size_t *inbytesleft, char *outbuf,
15d9d0b528387242011cdcc6190c9e598cfe3a07yy return (_do_kiconvstr_to_eucjp(inbuf, inbytesleft, outbuf,
15d9d0b528387242011cdcc6190c9e598cfe3a07yykiconvstr_fr_eucjpms(char *inbuf, size_t *inbytesleft, char *outbuf,
15d9d0b528387242011cdcc6190c9e598cfe3a07yy return (_do_kiconvstr_fr_eucjp(inbuf, inbytesleft, outbuf,
15d9d0b528387242011cdcc6190c9e598cfe3a07yykiconvstr_to_eucjpms(char *inbuf, size_t *inbytesleft, char *outbuf,
15d9d0b528387242011cdcc6190c9e598cfe3a07yy return (_do_kiconvstr_to_eucjp(inbuf, inbytesleft, outbuf,
15d9d0b528387242011cdcc6190c9e598cfe3a07yy_do_kiconv_fr_sjis(void *kcd, char **inbuf, size_t *inbytesleft,
15d9d0b528387242011cdcc6190c9e598cfe3a07yy return (0);
15d9d0b528387242011cdcc6190c9e598cfe3a07yy while (ileft != 0) {
15d9d0b528387242011cdcc6190c9e598cfe3a07yy } else if (KICONV_JA_ISSJKANA(ic1)) { /* 0201 Kana; 1byte */
15d9d0b528387242011cdcc6190c9e598cfe3a07yy } else if (KICONV_JA_ISSJKANJI1(ic1)) { /* 0208/UDC; 2bytes */
15d9d0b528387242011cdcc6190c9e598cfe3a07yy } else { /* 2nd byte check failed */
15d9d0b528387242011cdcc6190c9e598cfe3a07yy /* NOTREACHED */
15d9d0b528387242011cdcc6190c9e598cfe3a07yy } else if (KICONV_JA_ISSJSUPKANJI1(ic1)) { /* VDC, 2 bytes */
15d9d0b528387242011cdcc6190c9e598cfe3a07yy } else { /* 2nd byte check failed */
15d9d0b528387242011cdcc6190c9e598cfe3a07yy } else if (KICONV_JA_ISSJIBM(ic1) || /* Extended IBM area */
15d9d0b528387242011cdcc6190c9e598cfe3a07yy * We need a special treatment for each codes.
15d9d0b528387242011cdcc6190c9e598cfe3a07yy * By adding some offset number for them, we
15d9d0b528387242011cdcc6190c9e598cfe3a07yy * can process them as the same way of that of
15d9d0b528387242011cdcc6190c9e598cfe3a07yy * extended IBM chars.
15d9d0b528387242011cdcc6190c9e598cfe3a07yy * XXX: 0xfa54 and 0xfa5b must be mapped
15d9d0b528387242011cdcc6190c9e598cfe3a07yy * to JIS0208 area. Therefore we
15d9d0b528387242011cdcc6190c9e598cfe3a07yy * have to do special treatment.
15d9d0b528387242011cdcc6190c9e598cfe3a07yy } else { /* 2nd byte check failed */
15d9d0b528387242011cdcc6190c9e598cfe3a07yy * Based on the draft convention of OSF-JVC CDEWG,
15d9d0b528387242011cdcc6190c9e598cfe3a07yy * characters in this area will be mapped to
15d9d0b528387242011cdcc6190c9e598cfe3a07yy * "CHIKAN-MOJI." (convertible character)
15d9d0b528387242011cdcc6190c9e598cfe3a07yy * We use U+FFFD in this case.
15d9d0b528387242011cdcc6190c9e598cfe3a07yy } else { /* 2nd byte check failed */
15d9d0b528387242011cdcc6190c9e598cfe3a07yy } else { /* 1st byte check failed */
15d9d0b528387242011cdcc6190c9e598cfe3a07yy * One character successfully converted so update
15d9d0b528387242011cdcc6190c9e598cfe3a07yy * values outside of this function's stack.
15d9d0b528387242011cdcc6190c9e598cfe3a07yy return (rv);
15d9d0b528387242011cdcc6190c9e598cfe3a07yy * _kiconv_ja_lookuptbl()
15d9d0b528387242011cdcc6190c9e598cfe3a07yy * Return the index number if its index-ed number
15d9d0b528387242011cdcc6190c9e598cfe3a07yy * is the same as dest value.
15d9d0b528387242011cdcc6190c9e598cfe3a07yy for (i = 0; i < sz; i++) {
15d9d0b528387242011cdcc6190c9e598cfe3a07yy return (0x3f);
15d9d0b528387242011cdcc6190c9e598cfe3a07yy_do_kiconv_to_sjis(void *kcd, char **inbuf, size_t *inbytesleft,
15d9d0b528387242011cdcc6190c9e598cfe3a07yy return (0);
15d9d0b528387242011cdcc6190c9e598cfe3a07yy while (ileft != 0) {
15d9d0b528387242011cdcc6190c9e598cfe3a07yy /* non-BMP */
15d9d0b528387242011cdcc6190c9e598cfe3a07yy * for even number row (Ku), add 0x80 to
15d9d0b528387242011cdcc6190c9e598cfe3a07yy * look latter half of kiconv_ja_jistosj2[] array
15d9d0b528387242011cdcc6190c9e598cfe3a07yy /* NUMERO SIGN */
15d9d0b528387242011cdcc6190c9e598cfe3a07yy /* avoid putting NUL ('\0') */
15d9d0b528387242011cdcc6190c9e598cfe3a07yy * for even number row (Ku), add 0x80 to
15d9d0b528387242011cdcc6190c9e598cfe3a07yy * look latter half of kiconv_ja_jistosj2[]
15d9d0b528387242011cdcc6190c9e598cfe3a07yy * One character successfully converted so update
15d9d0b528387242011cdcc6190c9e598cfe3a07yy * values outside of this function's stack.
15d9d0b528387242011cdcc6190c9e598cfe3a07yy return (rv);
15d9d0b528387242011cdcc6190c9e598cfe3a07yy_do_kiconvstr_fr_sjis(char *inbuf, size_t *inbytesleft, char *outbuf,
15d9d0b528387242011cdcc6190c9e598cfe3a07yy return (0);
15d9d0b528387242011cdcc6190c9e598cfe3a07yy while (ileft != 0) {
15d9d0b528387242011cdcc6190c9e598cfe3a07yy return (0);
15d9d0b528387242011cdcc6190c9e598cfe3a07yy /* JIS X 0201 Kana; 1 byte */
15d9d0b528387242011cdcc6190c9e598cfe3a07yy /* JIS X 0208 or UDC; 2 bytes */
15d9d0b528387242011cdcc6190c9e598cfe3a07yy } else { /* 2nd byte check failed */
15d9d0b528387242011cdcc6190c9e598cfe3a07yy /* NOTREACHED */
15d9d0b528387242011cdcc6190c9e598cfe3a07yy } else if (KICONV_JA_ISSJSUPKANJI1(ic1)) { /* VDC, 2 bytes */
15d9d0b528387242011cdcc6190c9e598cfe3a07yy } else { /* 2nd byte check failed */
15d9d0b528387242011cdcc6190c9e598cfe3a07yy } else if (KICONV_JA_ISSJIBM(ic1) || /* Extended IBM area */
15d9d0b528387242011cdcc6190c9e598cfe3a07yy * We need a special treatment for each codes.
15d9d0b528387242011cdcc6190c9e598cfe3a07yy * By adding some offset number for them, we
15d9d0b528387242011cdcc6190c9e598cfe3a07yy * can process them as the same way of that of
15d9d0b528387242011cdcc6190c9e598cfe3a07yy * extended IBM chars.
15d9d0b528387242011cdcc6190c9e598cfe3a07yy * XXX: 0xfa54 and 0xfa5b must be mapped
15d9d0b528387242011cdcc6190c9e598cfe3a07yy * to JIS0208 area. Therefore we
15d9d0b528387242011cdcc6190c9e598cfe3a07yy * have to do special treatment.
15d9d0b528387242011cdcc6190c9e598cfe3a07yy } else { /* 2nd byte check failed */
15d9d0b528387242011cdcc6190c9e598cfe3a07yy * Based on the draft convention of OSF-JVC CDEWG,
15d9d0b528387242011cdcc6190c9e598cfe3a07yy * characters in this area will be mapped to
15d9d0b528387242011cdcc6190c9e598cfe3a07yy * "CHIKAN-MOJI." (convertible character)
15d9d0b528387242011cdcc6190c9e598cfe3a07yy * We use U+FFFD in this case.
15d9d0b528387242011cdcc6190c9e598cfe3a07yy } else { /* 2nd byte check failed */
15d9d0b528387242011cdcc6190c9e598cfe3a07yy } else { /* 1st byte check failed */
15d9d0b528387242011cdcc6190c9e598cfe3a07yy * One character successfully converted so update
15d9d0b528387242011cdcc6190c9e598cfe3a07yy * values outside of this function's stack.
15d9d0b528387242011cdcc6190c9e598cfe3a07yy return (rv);
15d9d0b528387242011cdcc6190c9e598cfe3a07yy_do_kiconvstr_to_sjis(char *inbuf, size_t *inbytesleft, char *outbuf,
15d9d0b528387242011cdcc6190c9e598cfe3a07yy return (0);
15d9d0b528387242011cdcc6190c9e598cfe3a07yy while (ileft != 0) {
15d9d0b528387242011cdcc6190c9e598cfe3a07yy return (0);
15d9d0b528387242011cdcc6190c9e598cfe3a07yy /* non-BMP */
15d9d0b528387242011cdcc6190c9e598cfe3a07yy * for even number row (Ku), add 0x80 to
15d9d0b528387242011cdcc6190c9e598cfe3a07yy * look latter half of kiconv_ja_jistosj2[] array
15d9d0b528387242011cdcc6190c9e598cfe3a07yy /* NUMERO SIGN */
15d9d0b528387242011cdcc6190c9e598cfe3a07yy /* avoid putting NUL ('\0') */
15d9d0b528387242011cdcc6190c9e598cfe3a07yy * for even number row (Ku), add 0x80 to
15d9d0b528387242011cdcc6190c9e598cfe3a07yy * look latter half of kiconv_ja_jistosj2[]
15d9d0b528387242011cdcc6190c9e598cfe3a07yy * One character successfully converted so update
15d9d0b528387242011cdcc6190c9e598cfe3a07yy * values outside of this function's stack.
15d9d0b528387242011cdcc6190c9e598cfe3a07yy return (rv);
15d9d0b528387242011cdcc6190c9e598cfe3a07yykiconv_fr_sjis(void *kcd, char **inbuf, size_t *inbytesleft,
15d9d0b528387242011cdcc6190c9e598cfe3a07yykiconv_to_sjis(void *kcd, char **inbuf, size_t *inbytesleft,
15d9d0b528387242011cdcc6190c9e598cfe3a07yykiconvstr_fr_sjis(char *inbuf, size_t *inbytesleft, char *outbuf,
15d9d0b528387242011cdcc6190c9e598cfe3a07yy return (_do_kiconvstr_fr_sjis(inbuf, inbytesleft, outbuf,
15d9d0b528387242011cdcc6190c9e598cfe3a07yykiconvstr_to_sjis(char *inbuf, size_t *inbytesleft, char *outbuf,
15d9d0b528387242011cdcc6190c9e598cfe3a07yy return (_do_kiconvstr_to_sjis(inbuf, inbytesleft, outbuf,
15d9d0b528387242011cdcc6190c9e598cfe3a07yykiconvstr_fr_cp932(char *inbuf, size_t *inbytesleft, char *outbuf,
15d9d0b528387242011cdcc6190c9e598cfe3a07yy return (_do_kiconvstr_fr_sjis(inbuf, inbytesleft, outbuf,
15d9d0b528387242011cdcc6190c9e598cfe3a07yykiconvstr_to_cp932(char *inbuf, size_t *inbytesleft, char *outbuf,
15d9d0b528387242011cdcc6190c9e598cfe3a07yy return (_do_kiconvstr_to_sjis(inbuf, inbytesleft, outbuf,
15d9d0b528387242011cdcc6190c9e598cfe3a07yystatic char *kiconv_ja_aliases[] = {"932", "shiftjis", "pck"};
15d9d0b528387242011cdcc6190c9e598cfe3a07yystatic char *kiconv_ja_canonicals[] = {"cp932", "sjis", "sjis"};
15d9d0b528387242011cdcc6190c9e598cfe3a07yy (sizeof (kiconv_ja_aliases) / sizeof (char *))
15d9d0b528387242011cdcc6190c9e598cfe3a07yy KICONV_JA_MAX_JA_OPS, /* number of conversion in kiconv_ja */
15d9d0b528387242011cdcc6190c9e598cfe3a07yy KICONV_JA_MAX_JA_ALIAS, /* number of alias in kiconv_ja */
15d9d0b528387242011cdcc6190c9e598cfe3a07yy "kiconv module for Japanese",
15d9d0b528387242011cdcc6190c9e598cfe3a07yy cmn_err(CE_WARN, "kiconv_ja: 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_ja: failed to remove kernel module");