Author: iratqq
Date: Sun Dec 14 22:09:42 2008
New Revision: 5675
Modified:
trunk/xim/compose.cpp
trunk/xim/locale.cpp
Log:
* xim/compose.cpp (mb_string_to_utf8):
* xim/locale.cpp (UTF8_Locale::utf8_to_native_str):
- Replace own conversion code with uim_iconv->convert().
Does it make sence???
Modified: trunk/xim/compose.cpp
==============================================================================
--- trunk/xim/compose.cpp (original)
+++ trunk/xim/compose.cpp Sun Dec 14 22:09:42 2008
@@ -1125,13 +1125,7 @@
int
mb_string_to_utf8(char *utf8, const char *str, int len, const char *enc) {
- size_t outbufsize = len + 1;
- const char *inbuf;
char *outbuf;
- char *inchar;
- char *outchar;
- size_t inbytesleft, outbytesleft;
- size_t ret_val;
iconv_t cd;
if (!uim_iconv->is_convertible("UTF-8", enc)) {
@@ -1140,53 +1134,16 @@
return 0;
}
- inbuf = str;
- if (!inbuf) {
- utf8[0] = '\0';
- return 0;
- }
-
cd = (iconv_t)uim_iconv->create("UTF-8", enc);
- // no conversion needed
- if (!cd)
- return strlcpy(utf8, inbuf, len + 1);
-
- outbuf = (char *)malloc(outbufsize);
- if (!outbuf) {
- uim_iconv->release(cd);
- utf8[0] = '\0';
- return 0;
- }
- inchar = (char *)inbuf;
- outchar = outbuf;
- inbytesleft = strlen(inbuf);
- outbytesleft = outbufsize - 1;
- ret_val = iconv(cd, (ICONV_CONST char **)&inchar, &inbytesleft,
&outchar, &outbytesleft);
-
- if (ret_val == (size_t)-1 && errno != E2BIG) {
- //perror("error in iconv");
- uim_iconv->release(cd);
- free(outbuf);
- utf8[0] = '\0';
- return 0;
- }
- ret_val = iconv(cd, NULL, NULL, &outchar, &outbytesleft);
- if (ret_val == (size_t)-1 && errno != E2BIG) {
- //perror("error in iconv");
- uim_iconv->release(cd);
- free(outbuf);
- utf8[0] = '\0';
- return 0;
- }
- uim_iconv->release(cd);
+ outbuf = uim_iconv->convert(cd, str);
- *outchar = '\0';
+ uim_iconv->release(cd);
strlcpy(utf8, outbuf, len + 1);
free(outbuf);
- return outbufsize - outbytesleft - 1;
+ return strlen(utf8);
}
/*
Modified: trunk/xim/locale.cpp
==============================================================================
--- trunk/xim/locale.cpp (original)
+++ trunk/xim/locale.cpp Sun Dec 14 22:09:42 2008
@@ -249,49 +249,20 @@
uim_iconv->release(m_iconv_cd);
}
-char *UTF8_Locale::utf8_to_native_str(char *utf8) {
- size_t outbufsize = BUFSIZ;
- char *inbuf, outbuf[BUFSIZ], *convstr = NULL;
- char *inchar;
- char *outchar;
- size_t inbytesleft, outbytesleft;
- size_t ret_val;
-
- if (m_iconv_cd == (iconv_t)-1)
- return NULL;
+char *UTF8_Locale::utf8_to_native_str(char *utf8)
+{
+ char *str;
- inbuf = utf8;
- if (!inbuf)
+ if (m_iconv_cd == (iconv_t)-1)
return NULL;
- // no conversion needed
- if (!m_iconv_cd)
- return strdup(inbuf);
+ str = uim_iconv->convert(m_iconv_cd, utf8);
- inchar = inbuf;
- outchar = outbuf;
- inbytesleft = strlen(inbuf);
- outbytesleft = outbufsize - 1;
- ret_val = iconv(m_iconv_cd, (ICONV_CONST char **)&inchar,
&inbytesleft, &outchar, &outbytesleft);
- if (ret_val == (size_t)-1 && errno != E2BIG) {
- //perror("error in iconv");
- return NULL;
- }
- ret_val = iconv(m_iconv_cd, NULL, NULL, &outchar, &outbytesleft);
- if (ret_val == (size_t)-1 && errno != E2BIG) {
- //perror("error in iconv");
- return NULL;
+ if (strlen(str) == 0) {
+ free(str);
+ return NULL;
}
-
- convstr = (char *)malloc(outbufsize - outbytesleft);
- if (!convstr) {
- return NULL;
- }
-
- *outchar = '\0';
-
- strlcpy(convstr, outbuf, outbufsize - outbytesleft);
- return convstr;
+ return str;
}