Fix bugs in EUC_TW support. This fix includes patches contributed
authorTatsuo Ishii <ishii@postgresql.org>
Fri, 17 Nov 2000 04:53:54 +0000 (04:53 +0000)
committerTatsuo Ishii <ishii@postgresql.org>
Fri, 17 Nov 2000 04:53:54 +0000 (04:53 +0000)
by Chih-Chang Hsi. See "A Patch for MIC to EUC_TW code converting in
mb support" posting in pgsql-patches list dated 09 Nov 2000.

src/backend/utils/mb/conv.c

index 23f3d621bc4aa7dc7595830399d4ef13736dd186..3bd18313a58579097d35974655072313a3da5397 100644 (file)
@@ -538,15 +538,22 @@ mic2euc_tw(unsigned char *mic, unsigned char *p, int len)
        {
                len -= pg_mic_mblen(mic++);
 
-               if (c1 == LC_CNS11643_1 || c1 == LC_CNS11643_2)
+               if (c1 == LC_CNS11643_1)
                {
                        *p++ = *mic++;
                        *p++ = *mic++;
                }
+               else if (c1 == LC_CNS11643_2)
+               {
+                       *p++ = SS2;
+                       *p++ = 0xa2;
+                       *p++ = *mic++;
+                       *p++ = *mic++;
+               }
                else if (c1 == 0x9d)
                {                                               /* LCPRV2? */
                        *p++ = SS2;
-                       *p++ = c1 - LC_CNS11643_3 + 0xa3;
+                       *p++ = *mic++ - LC_CNS11643_3 + 0xa3;
                        *p++ = *mic++;
                        *p++ = *mic++;
                }
@@ -573,7 +580,7 @@ big52mic(unsigned char *big5, unsigned char *p, int len)
        unsigned short big5buf,
                                cnsBuf;
        unsigned char lc;
-       char            bogusBuf[2];
+       char            bogusBuf[3];
        int                     i;
 
        while (len > 0 && (c1 = *big5++))