Fix ASCII case in pg_wchar2mule_with_len.

Also some cosmetic improvements for wchar-to-mblen patch.
This commit is contained in:
Tom Lane 2012-07-10 15:58:36 -04:00
parent 379607c9e8
commit 60e9c224a1

View File

@ -99,8 +99,7 @@ pg_euc2wchar_with_len(const unsigned char *from, pg_wchar *to, int len)
*to |= *from++; *to |= *from++;
len -= 2; len -= 2;
} }
else else /* must be ASCII */
/* must be ASCII */
{ {
*to = *from++; *to = *from++;
len--; len--;
@ -354,7 +353,7 @@ pg_wchar2euc_with_len(const pg_wchar *from, unsigned char *to, int len)
{ {
unsigned char c; unsigned char c;
if ((c = *from >> 24)) if ((c = (*from >> 24)))
{ {
*to++ = c; *to++ = c;
*to++ = (*from >> 16) & 0xff; *to++ = (*from >> 16) & 0xff;
@ -362,14 +361,14 @@ pg_wchar2euc_with_len(const pg_wchar *from, unsigned char *to, int len)
*to++ = *from & 0xff; *to++ = *from & 0xff;
cnt += 4; cnt += 4;
} }
else if ((c = *from >> 16)) else if ((c = (*from >> 16)))
{ {
*to++ = c; *to++ = c;
*to++ = (*from >> 8) & 0xff; *to++ = (*from >> 8) & 0xff;
*to++ = *from & 0xff; *to++ = *from & 0xff;
cnt += 3; cnt += 3;
} }
else if ((c = *from >> 8)) else if ((c = (*from >> 8)))
{ {
*to++ = c; *to++ = c;
*to++ = *from & 0xff; *to++ = *from & 0xff;
@ -803,10 +802,11 @@ static int
pg_wchar2mule_with_len(const pg_wchar *from, unsigned char *to, int len) pg_wchar2mule_with_len(const pg_wchar *from, unsigned char *to, int len)
{ {
int cnt = 0; int cnt = 0;
unsigned char lb;
while (len > 0 && *from) while (len > 0 && *from)
{ {
unsigned char lb;
lb = (*from >> 16) & 0xff; lb = (*from >> 16) & 0xff;
if (IS_LC1(lb)) if (IS_LC1(lb))
{ {
@ -853,7 +853,7 @@ pg_wchar2mule_with_len(const pg_wchar *from, unsigned char *to, int len)
} }
else else
{ {
*to++ = lb; *to++ = *from & 0xff;
cnt += 1; cnt += 1;
} }
from++; from++;