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 c...@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); } }