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;
 }


Reply via email to