RFR(xs): JDK-8152329: jvm should treat the "Multi-Release" jar manifest attribute name as case insensitive
Calvin Cheung
calvin.cheung at oracle.com
Wed Apr 6 18:07:02 UTC 2016
Hi Jiangli,
Thanks for your re-review.
Calvin
On 4/6/16, 10:42 AM, Jiangli Zhou wrote:
> Hi Calvin,
>
> Looks good. Thank you for making the change.
>
> Thanks,
> Jiangli
>
>> On Apr 5, 2016, at 5:13 PM, Calvin Cheung <calvin.cheung at oracle.com
>> <mailto:calvin.cheung at oracle.com>> wrote:
>>
>>
>>
>> On 4/5/16, 1:29 PM, Jiangli Zhou wrote:
>>> Hi Calvin,
>>>
>>>> On Apr 5, 2016, at 10:53 AM, Calvin Cheung
>>>> <calvin.cheung at oracle.com <mailto:calvin.cheung at oracle.com>> wrote:
>>>>
>>>>
>>>>
>>>> On 4/5/16, 10:44 AM, Jiangli Zhou wrote:
>>>>> Hi Calvin,
>>>>>
>>>>> Have you thought about using strcasecmp()? The
>>>>> globalDefinitions_visCPP.hpp defines strcasecmp to _stricmp. So
>>>>> compiler dependency is not an issue. We have existing code that
>>>>> uses strcasecmp() for case insensitive comparison.
>>>> I don't think it will work in this situation. It is because the
>>>> manifest buffer contains all the jar manifest entries, not just the
>>>> "Multi-Release" entry. In other words, "Multi-Release" isn't at the
>>>> beginning of the string.
>>>
>>> Ok. There is strcasestr(), but it’s a nonstandard extension. I
>>> couldn’t find a Windows equivalent for that. Iterating the string to
>>> covert each char to lower case is slow although it’s only used in
>>> CDS dump time. To make it more efficient, you could add a new field,
>>> ‘u1 is_multi_versioned' in ClassPathZipEntry to remember the result
>>> so you only need to do the case in-senstive strstr once, instead of
>>> everytime when ClassPathZipEntry::open_stream() is called. The new
>>> field could have three states, ‘unknown’, ‘yes’ and ‘no’. If it’s
>>> ‘unknown’, is_multiple_versioned() opens the manifest, otherwise it
>>> can return quickly.
>> I've an updated webrev for the above change.
>> http://cr.openjdk.java.net/~ccheung/8152329/webrev.02/
>>
>> Some testing in progress.
>>
>> thanks,
>> Calvin
>>>
>>> Thanks,
>>> Jiangli
>>>
>>>
>>>>
>>>> thanks,
>>>> Calvin
>>>>>
>>>>> // Non-standard stdlib-like stuff:
>>>>> inlineintstrcasecmp(constchar*s1,constchar*s2)
>>>>> {return_stricmp(s1,s2); }
>>>>>
>>>>> Thanks,
>>>>> Jiangli
>>>>>> On Apr 4, 2016, at 2:07 PM, Calvin Cheung
>>>>>> <calvin.cheung at oracle.com <mailto:calvin.cheung at oracle.com>> wrote:
>>>>>>
>>>>>>
>>>>>> Please review this small fix for:
>>>>>> https://bugs.openjdk.java.net/browse/JDK-8152329
>>>>>>
>>>>>> The fix is to convert the buffer containing the jar manifest into
>>>>>> lower case before performing strstr.
>>>>>>
>>>>>> webrev:http://cr.openjdk.java.net/~ccheung/8152329/webrev.01/
>>>>>>
>>>>>> Testing:
>>>>>> JPRT -testset hotspot
>>>>>> The tests under runtime on the platforms built by JPRT.
>>>>>>
>>>>>> thanks,
>>>>>> Calvin
>>>>>
>>>
>>
>
More information about the hotspot-runtime-dev
mailing list