On 08/17/2018 12:44 PM, Bernd Edlinger wrote:
> On 08/17/18 20:23, Martin Sebor wrote:
>> On 08/17/2018 06:14 AM, Joseph Myers wrote:
>>> On Fri, 17 Aug 2018, Jeff Law wrote:
>>>
>>>> On 08/16/2018 05:01 PM, Joseph Myers wrote:
>>>>> On Thu, 16 Aug 2018, Jeff Law wrote:
>>>>>
>>>>>> restores previous behavior.  The sprintf bits want to count element
>>>>>> sized chunks, which for wchars is 4 bytes (that count will then be
>>>>>
>>>>>>    /* Compute the range the argument's length can be in.  */
>>>>>> -  fmtresult slen = get_string_length (arg);
>>>>>> +  int count_by = dir.specifier == 'S' || dir.modifier == FMT_LEN_l ? 4 
>>>>>> : 1;
>>>>>
>>>>> I don't see how a hardcoded 4 is correct here.  Surely you need to example
>>>>> wchar_type_node to determine its actual size for this target.
>>>> We did kick this around a little.  IIRC Martin didn't think that it was
>>>> worth handling the 2 byte wchar case.
>>
>> Sorry, I think we may have miscommunicated -- I didn't think it
>> was useful to pass a size of the character type to the function.
>> I agree that passing in a hardcoded constant doesn't seem right
>> (even if GCC's wchar_t were always 4 bytes wide).
>>
>> I'm still not sure I see the benefit of passing in the expected
>> element size given that the patch causes c_strlen() fail when
>> the actual element size doesn't match ELTSIZE.  If the caller
>> asks for the number of bytes in a const wchar_t array it should
>> get back the number bytes.  (I could see it fail if the caller
>> asked for the number of words in a char array whose size was
>> not evenly divisible by wordsize.)
>>
> 
> I think in this case c_strlen should use the type which the %S format
> uses at runtime, otherwise it will not have anything to do with
> the reality.
That's a different issue than what Martin is talking about, but is the
same as what Joseph is asking us to fix.

This is well outside my area of expertise, but I believe Windows has 16
bit wchar_t, so these tests probably aren't working correctly on
cygwin/mingw.

Jeff

Reply via email to