RFR: JDK-8211343: nsk_jvmti_parseoptions should handle multiple suboptions
serguei.spitsyn at oracle.com
serguei.spitsyn at oracle.com
Fri Dec 21 22:26:15 UTC 2018
On 12/21/18 12:55 PM, gary.adams at oracle.com wrote:
> On 12/21/18 3:33 PM, serguei.spitsyn at oracle.com wrote:
>> Hi Gary,
>>
>> Looks good in general.
>> Thank you for taking care about this!
>>
>> A couple of comments.
>>
>> It seems, with your fixes the macro NSK_JVMTI_OPTION_VAL_SEP is not
>> needed anymore.
>> Also, I wonder if it makes sense to continue using:
>> 238 value = index(name, NSK_JVMTI_OPTION_VAL_SEP);
> This is one of the places where I feel having the symbolic constant
> actually makes the code harder to read.
>
> The constant is not used anywhere else.
>
Kind of agree with you.
> I'm testing now with strchr because of strings.h issues on other
> platforms.
>
>>
>>
>> Also, a cleanup is needed to remove the lines 241 and 244 from the
>> fragment:
>> 240 if (value == NULL) {
>> 241 /* debug: printf ("%s\n", name); */
>> 242 } else {
>> 243 *value++ = '\0';
>> 244 /* debug: printf ("%s=%s\n", name, value); */
>> 245 }
>> Then it makes sense to refactor it:
>> if (value != NULL) {
>> *value++ = '\0';
>> }
>
> Yes, that is the plan.
>
> Until all the testing is done, it helps to have some quick debugging
> available.
>
Okay.
Thanks,
Serguei
> ...
>
>> Thanks,
>> Serguei
>>
>>
>> On 12/21/18 11:31, Chris Plummer wrote:
>>> Hi Gary,
>>>
>>> This is much better. Just one question and a couple of minor comments:
>>>
>>> The original code had the following:
>>>
>>> 225 context.options.string = (char*)malloc(len + 2);
>>> ...
>>> 231 strncpy(context.options.string, options, len);
>>> 232 context.options.string[len] = '\0';
>>> 233 context.options.string[len+1] = '\0';
>>>
>>> Do you know why it was placing two NULLs at the end (and the first
>>> was unnecessary since strncpy already did that)?
>>>
>>> 243 *value++ = '\0';
>>>
>>> This should be rewritten in a manner that make it clearer what it
>>> does. At first glance you have to ask yourself whether it is setting
>>> *value or *(value++). Then hopefully you eventually clue in that
>>> they are both the same since "value++" evaluates to "value". I think
>>> the following would be better:
>>>
>>> *value = '\0';
>>> value++;
>>>
>>> 235 /* Create a temporay copy of the options string to be
>>> tokenized. */
>>>
>>> "temporay" typo.
>>>
>>> thanks,
>>>
>>> Chris
>>>
>>> On 12/21/18 10:52 AM, Gary Adams wrote:
>>>> Here is a first pass at a replacement parser for jvmti test options.
>>>>
>>>> Webrev: http://cr.openjdk.java.net/~gadams/8211343/webrev.00/
>>>> Issue: https://bugs.openjdk.java.net/browse/JDK-8211343
>>>>
>>>> Testing is in progress. Need to check out more platforms.
>>>> On local linux testing one jvmti test failed SetNativeMethodPrefix001
>>>> which passed an empty options string.
>>>> ...
>>>
>>>
>>>
>>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mail.openjdk.java.net/pipermail/serviceability-dev/attachments/20181221/5227bdfc/attachment.html>
More information about the serviceability-dev
mailing list