]> git.saurik.com Git - apple/icu.git/blobdiff - icuSources/tools/makeconv/gencnvex.c
ICU-531.48.tar.gz
[apple/icu.git] / icuSources / tools / makeconv / gencnvex.c
index cf09cbe5b3a605d291acf468b01729a5b4a67316..10a0571c6b9e36e9b773b62f1322b8b7d07cdeca 100644 (file)
@@ -1,7 +1,7 @@
 /*
 *******************************************************************************
 *
-*   Copyright (C) 2003-2007, International Business Machines
+*   Copyright (C) 2003-2013, International Business Machines
 *   Corporation and others.  All Rights Reserved.
 *
 *******************************************************************************
@@ -100,6 +100,7 @@ CnvExtClose(NewConverter *cnvData) {
         utm_close(extData->fromUTableUChars);
         utm_close(extData->fromUTableValues);
         utm_close(extData->fromUBytes);
+        uprv_free(extData);
     }
 }
 
@@ -349,7 +350,7 @@ getToUnicodeValue(CnvExtData *extData, UCMTable *table, UCMapping *m) {
 
         /* allocate it and put its length and index into the value */
         value=
-            (((uint32_t)m->uLen+UCNV_EXT_TO_U_LENGTH_OFFSET)<<UCNV_EXT_TO_U_LENGTH_SHIFT)|
+            (((uint32_t)u16Length+UCNV_EXT_TO_U_LENGTH_OFFSET)<<UCNV_EXT_TO_U_LENGTH_SHIFT)|
             ((uint32_t)utm_countItems(extData->toUUChars));
         u=utm_allocN(extData->toUUChars, u16Length);
 
@@ -605,7 +606,7 @@ prepareFromUMappings(UCMTable *table) {
             flag&=MBCS_FROM_U_EXT_MASK;
             m->f=flag;
         }
-        if(flag==0 || flag==1 || (flag==2 && m->bLen==1)) {
+        if(flag==0 || flag==1 || (flag==2 && m->bLen==1) || flag==4) {
             map[j++]=i;
 
             if(m->uLen>1) {
@@ -671,6 +672,8 @@ getFromUBytesValue(CnvExtData *extData, UCMTable *table, UCMapping *m) {
     value|=(uint32_t)m->bLen<<UCNV_EXT_FROM_U_LENGTH_SHIFT;
     if(m->f==0) {
         value|=UCNV_EXT_FROM_U_ROUNDTRIP_FLAG;
+    } else if(m->f==4) {
+        value|=UCNV_EXT_FROM_U_GOOD_ONE_WAY_FLAG;
     }
 
     /* calculate the real UTF-16 length (see recoding in prepareFromUMappings()) */