printf: %ls or %S does not work when string is of length 1.
Jeff Johnston
jjohnstn@redhat.com
Mon Sep 1 09:07:00 GMT 2008
Corinna Vinschen wrote:
> On Aug 27 14:31, Jeff Johnston wrote:
>
>> Corinna Vinschen wrote:
>>
>>> I tracked this down to a problem in the function _wcsrtombs_r.
>>>
>>> The condition to write a converted character into the destination string
>>> and to continue the loop is (wcsrtombs.c, line 48):
>>>
>>> if (n <= len - bytes && bytes < len)
>>>
>>> The second half of this condition is wrong, AFAICS. First of all, it
>>> should be bytes <= len instead of bytes < len. Second, this part of the
>>> condition is already catched by the first part of the condition:
>>>
>>> n <= len - bytes <==> n + bytes <= len
>>>
>>> with n always >= 0, bytes is always <= len if n + bytes is <= len. So
>>> the condition is redundant.
>>>
>>>
>>>
>> Thanks for looking at this Corinna.
>>
>> Actually, the second part is needed because the first equation is unsigned.
>> Let's say len is 1 but bytes is 2. len - bytes is (unsigned)-1. We don't
>> want to write at this point. Thus, we make the additional check that bytes
>> is actually <= len. I just modified your change and checked it in.
>>
>
> Thank you. But... wouldn't
>
> if (n + bytes <= len)
>
> have the same result?
>
>
Well sure, if one wants to be practical :) Patch checked in.
-- Jeff J.
More information about the Newlib
mailing list