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é