[PATCH v8 1/3] cmdline: use C standard library as number parser

Burakov, Anatoly anatoly.burakov at intel.com
Fri May 9 15:08:22 CEST 2025


On 5/9/2025 3:02 PM, Burakov, Anatoly wrote:
> On 5/8/2025 3:16 PM, Anatoly Burakov wrote:
>> Remove custom number parser and use C standard library instead. In 
>> order to
>> keep compatibility with earlier versions of the parser, we have to take
>> into account a couple of quirks:
>>
>> - We did not consider "negative" numbers to be valid for anything other
>>    than base-10 numbers, whereas C standard library does. Adjust the 
>> tests
>>    to match the new behavior.
>> - We did not consider numbers such as "+4" to be valid, whereas C
>>    standard library does. Adjust the tests to match the new behavior.
>> - C standard library's strtoull does not do range checks on negative
>>    numbers, so we have to parse knowingly-negative numbers as signed.
>> - C standard library does not support binary numbers, so we keep 
>> around the
>>    relevant parts of the custom parser in place to support binary 
>> numbers.
>>
>> Signed-off-by: Anatoly Burakov <anatoly.burakov at intel.com>
>> ---
>>
>> Notes:
>>      v7 -> v8:
>>      - Added the commented-out out-of-bounds check back
>>      - Replaced debug print messages to ensure they don't attempt to
>>        index the num_help[] array (should fix compile errors)
>>      v5 -> v6:
>>      - Allowed more negative numbers (such as negative octals or hex)
>>      - Updated unit tests to check new cases
>>      - Small refactoring of code to reduce amount of noise
>>      - More verbose debug output
>>      v4 -> v5:
>>      - Added this commit
> 
> There is a unit test failure coming specifically from this commit, that 
> only happens on ARM. Log:
> 
> Error: parsing -0b0111010101 as INT16 succeeded!
> 
> That is, when confronted with a negative binary string, it seems that 
> strtoll will report success, whereas other platforms report failure. I'm 
> confused, is libc strtoll different on ARM? I don't have an ARM platform 
> available to test this so I don't know why this is happening.
> 

Correction: it seems that newer libc versions have added support for 
binary formats. I'll therefore amend the tests to account for that.

-- 
Thanks,
Anatoly


More information about the dev mailing list