Re: [PATCH 2/6] parse-options: add precision handling for OPTION_SET_INT

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



On 7/1/25 12:55 PM, Patrick Steinhardt wrote:
> On Sun, Jun 29, 2025 at 01:50:39PM +0200, René Scharfe wrote:
>> diff --git a/parse-options.c b/parse-options.c
>> index da07a000a3..bbb68603cc 100644
>> --- a/parse-options.c
>> +++ b/parse-options.c
>> @@ -85,6 +85,36 @@ static intmax_t get_int_value(const struct option *opt)
>>  	}
>>  }
>>  
>> +static enum parse_opt_result set_int_value(const struct option *opt,
>> +					   enum opt_parsed flags,
>> +					   intmax_t value)
>> +{
>> +	switch (opt->precision) {
>> +	case sizeof(int8_t):
>> +		*(int8_t *)opt->value = value;
>> +		return 0;
>> +	case sizeof(int16_t):
>> +		*(int16_t *)opt->value = value;
>> +		return 0;
>> +	case sizeof(int32_t):
>> +		*(int32_t *)opt->value = value;
>> +		return 0;
>> +	case sizeof(int64_t):
>> +		*(int64_t *)opt->value = value;
>> +		return 0;
>> +	default:
>> +		BUG("invalid precision for option %s", optname(opt, flags));
>> +	}
>> +}
> 
> The function only ever dies or returns successfully, so can't we make it
> return nothing instead? On the other hand it does make a couple of
> callsites a bit nicer to read.

We can.  Not sure we should, obviously, but I don't have strong feelings
either way.

> 
>> +static int signed_int_fits(intmax_t value, size_t size)
>> +{
>> +	size_t bits = size * CHAR_BIT;
>> +	intmax_t upper_bound = INTMAX_MAX >> (bitsizeof(intmax_t) - bits);
>> +	intmax_t lower_bound = -upper_bound - 1;
>> +	return lower_bound <= value && value <= upper_bound;
>> +}
>> +
> 
> Should we s/size/precision/ so that it's clear what kind of size this
> exactly is?
It's the width of an integer variable as in sizeof(), so the name fits.
We can inline this single-caller function if it's indeed confusing.

René







[Index of Archives]     [Linux Kernel Development]     [Gcc Help]     [IETF Annouce]     [DCCP]     [Netdev]     [Networking]     [Security]     [V4L]     [Bugtraq]     [Yosemite]     [MIPS Linux]     [ARM Linux]     [Linux Security]     [Linux RAID]     [Linux SCSI]     [Fedora Users]

  Powered by Linux