[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: bash-3.2 multibyte behavior on Solaris
From: |
Chet Ramey |
Subject: |
Re: bash-3.2 multibyte behavior on Solaris |
Date: |
Sat, 27 Jun 2009 14:21:58 -0400 |
User-agent: |
Thunderbird 2.0.0.22 (Macintosh/20090605) |
Jan Hnatek wrote:
>
> Chet Ramey wrote:
>> So what does the Solaris mbrtowc return in this case? The flow of that
>> particular section of code isn't that great (bash-4.0 is better), but it
>> seems to me that point can only increase. If mbrtowc returns -2, the
>> loop won't be entered at all.
>
> I've checked it and looks to do the following
> (correct me if I'm wrong):
> - tmp is unsigned
> - mbrtowc returns -2
> - tmp > 0 is true and loop is entered
Sure, but tmp is unsigned. It must be integer promotion happening
that I overlooked.
Try the bash-4.0/readline-6.0 version of the code, which I've attached.
Chet
--
``The lyf so short, the craft so long to lerne.'' - Chaucer
Chet Ramey, ITS, CWRU chet@case.edu http://cnswww.cns.cwru.edu/~chet/
*** bash-3.2-patched/lib/readline/mbutil.c 2009-06-16 11:26:50.000000000
-0400
--- bash-4.0-patched/lib/readline/mbutil.c 2009-01-04 14:32:33.000000000
-0500
***************
*** 132,141 ****
{
tmp = mbrtowc (&wc, string + point, strlen (string + point), &ps);
! while (tmp > 0 && wcwidth (wc) == 0)
{
point += tmp;
tmp = mbrtowc (&wc, string + point, strlen (string + point), &ps);
- if (MB_NULLWCH (tmp) || MB_INVALIDCH (tmp))
- break;
}
}
--- 130,137 ----
{
tmp = mbrtowc (&wc, string + point, strlen (string + point), &ps);
! while (MB_NULLWCH (tmp) == 0 && MB_INVALIDCH (tmp) == 0 && wcwidth (wc)
== 0)
{
point += tmp;
tmp = mbrtowc (&wc, string + point, strlen (string + point), &ps);
}
}